说我有一个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万行。
我应该如何进行?
答案 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}