Из CSV-файла получите заголовок файла и часть файла на основе параметров номера начальной и конечной строки с помощью PowerShell - PullRequest
1 голос
/ 22 января 2020

Итак, у меня очень большой CSV-файл, в первой строке заголовки столбцов. Я хочу сохранить первую строку в качестве заголовка и добавить часть файла из середины файла или, возможно, конца. Я также пытаюсь выбрать только несколько столбцов из файла. И, наконец, было бы замечательно, если бы решение также изменило разделитель файлов с запятой на вкладку.

Я стремлюсь к решению, которое состоит из одной строки или, возможно, 2?

Нерабочий код версии 30 ...

Get-Content -Tail 100 filename.csv | Export-Csv -Delimiter "`t" -NoTypeInformation -Path .\filename_out.csv

Я пытаюсь лучше понять PowerShell. Пока все хорошо, но я еще не совсем там. Но попытки решить такие проблемы помогают мне (и, надеюсь, другим) создать хорошую коллекцию кодов идиом. (К вашему сведению - босс пытается использовать PowerShell благодаря нашим усилиям.)

Ответы [ 2 ]

0 голосов
/ 22 января 2020

iRon предоставил решающий указатель: использование Import-Csv вместо Get-Content позволяет извлекать произвольные диапазоны из исходного файла в качестве объектов , если выбрано с помощью Select-Object, и повторный экспорт этих объектов с помощью Export-Csv автоматически включает строку заголовка, имена столбцов которой являются именами свойств входных объектов, как первоначально получено из строки заголовка входного файла.

Для выбора произвольного диапазона строк , объедините параметры Select-Object -Skip и -First:

  • Чтобы получать строки только из начала , используйте просто -First $count:

  • Чтобы получать строки только из end , используйте просто -Last $count

  • Для получения строк в данном диапазоне используйте просто -Skip $startRowMinus1 -First $rangeRowCount

Например, следующая команда извлекает строки с 10 по 30:

Import-Csv iarf.csv | 
  Select-Object -Property Id,Name,RecordTypeId,CreatedDate -Skip 9 -First 20 |
    Export-Csv -Delimiter "`t" -NoTypeInformation -Path .\iarf100props6.csv
0 голосов
/ 22 января 2020

ОК, благодаря совету iRon. По умолчанию Import-CSV разделен запятыми, Select-Object -Property получает нужные мне столбцы, select -Last получает последние 200 строк, а Export-CSV изменяет разделитель на вкладку:

Import-Csv iarf.csv |
  Select-Object -Property Id,Name,RecordTypeId,CreatedDate | 
   select -Last 200 | 
     Export-Csv -Delimiter "`t" -NoTypeInformation -Path .\iarf100props6.csv
...