Импорт-CSV Select -Skip

У меня есть несколько файлов CSV, которые должны быть объединены в один. В каждом файле CSV есть заголовок, а во втором ряду текст, который мне не нужен.

Я заметил | Select -Skip 1 Заявление для заголовков. Теперь мне было интересно, как я могу пропустить 3-й ряд?

Я попробовал это, но это дает мне пустой файл

Get-ChildItem -Path $CSVFolder -Recurse -Filter "*.csv" | %{
  Import-Csv $_.FullName -Header header1, header3, header4 |
    Select -Skip 1 | Select -Skip 2
} | Export-Csv "C:\Export\result.csv" -NoTypeInformation

2 ответа

Попробуй это

$i=0;
import-csv "C:\temp2\missing.csv" | %{$i++; if ($i -ne 3) {$_}} | export-csv  "C:\temp2\result.csv" -NoTypeInformation

Если все, что вы делаете, - пропускает первые строки во всех пользовательских случаях, просто используйте -skip 3.

Get-Content -Path 'D:\Temp\UserRecord.csv'
# Results
<#
Name     Codes
------- ---------
John    AJFKC,EFUY
Ben    EFOID, EIUF
Alex    OIPORE, OUOIJE
#>


# Return all text after row the Header and row 3
(Get-Content -Path 'D:\Temp\UserRecord.csv') | 
Select -Skip 3

# Results
<#
Ben    EFOID, EIUF
Alex    OIPORE, OUOIJE
#>

Смотрите также:

Анализ текста с помощью PowerShell (1/3)

Select-Object не позволяет пропускать произвольные строки между другими строками. Если вы хотите удалить определенную строку из файла ввода текста, вы можете сделать это с помощью счетчика, например, так:

$cnt = 0
Import-Csv 'C:\path\to\input.csv' |
  Where-Object { ($cnt++) -ne 3 } |
  Export-Csv 'C:\path\to\output.csv' -NoType

Если записи во входном CSV-файле не имеют вложенных разрывов строк, вы также можете использовать Get-Content/Set-Contentчто, вероятно, немного быстрее, чем Import-Csv/Export-Csv (из-за меньшего разбора накладных расходов). Увеличьте номер строки, которую вы хотите пропустить, на единицу, чтобы учесть строку заголовка.

$cnt = 0
Get-Content 'C:\path\to\input.csv' |
  Where-Object { ($cnt++) -ne 4 } |
  Set-Content 'C:\path\to\output.csv'
Другие вопросы по тегам