Как разделить CSV в соответствии со значением столбца в PowerShell? - PullRequest
2 голосов
/ 03 мая 2019

Скажи, что у меня input.CSV выглядит вот так

234321, AAA, value1
7751, BBB, value2
32123, AAA, value2
34553, CCC, value4
65433, BBB, value3
43664, AAA, value3

Я хотел бы разделить его на несколько CSV в соответствии со значениями второго столбца. Итак, файл AAA.csv, файл BBB.csv, файл CCC.csv и т. Д.

Я не знаю заранее всех значений 2-го столбца, но они ограничены максимум 100. И, input.CSV содержит не более 100 000 строк.

Как мне поступить?

Ответы [ 2 ]

2 голосов
/ 04 мая 2019

Когда вы работаете с большим входным файлом, я рекомендую вам использовать возможности потоковой передачи PowerShell для ваших входных данных, чтобы они не заполняли всю вашу память.
Для этого вам следует избегать назначения ваших входных данныхпеременной (например: $csv = Import-Csv input.csv) или заключите ее в квадратные скобки (например: (Import-Csv input.csv) | ...).

Import-Csv input.csv | ForEach-Object {$_ | Export-Csv ($_.col2 + ".csv") -Append}
1 голос
/ 03 мая 2019

Будет ли это работать?

$test = @"
col1,col2,col3
234321, AAA, value1
7751, BBB, value2
32123, AAA, value2
34553, CCC, value4
65433, BBB, value3
43664, AAA, value3
"@
$test | Out-File input.csv

$csv = Import-Csv input.csv

$listofcol2values = @()
$listofcol2values = $csv | Select -ExpandProperty col2 -Unique

foreach ($value in $listofcol2values)
{$csv | ?{$_.col2 -eq $value} | Export-Csv ($value + ".csv")}

EDIT:

Решение, предложенное iRon, действительно более уместно:

Import-Csv input.csv | % {$_ | Export-Csv ($_.col2 + ".csv") -Append}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...