如何在PowerShell中根据列的值拆分CSV?

时间:2019-05-03 20:06:14

标签: powershell csv

说我有一个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文件等。

我不预先知道所有第二列的值,但是最多只能有100个。input.CSV最多包含10万行。

我应该如何进行?

2 个答案:

答案 0 :(得分:2)

在处理大型输入文件时,建议您对输入数据使用PowerShell流功能,以免填满所有内存。
为此,您应该避免将输入数据分配给变量(例如: $csv = Import-Csv input.csv )或将其括在方括号中(例如: (Import-Csv input.csv) | ...

Import-Csv input.csv | ForEach-Object {$_ | Export-Csv ($_.col2 + ".csv") -Append}

答案 1 :(得分:1)

这项工作吗?

$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")}

编辑:

iRon建议的解决方案确实更合适:

Import-Csv input.csv | % {$_ | Export-Csv ($_.col2 + ".csv") -Append}