输入 csv 文件:
key,c1,c2,c3......,cn
1,car,phone,cat,.....,kite
2,abc,def,hij,.......,pot
1,yes,no,is,.........,hello
2,hello,yes,no,......,help
输出 csv 文件:
Key,c1,c2,c3,.......,cn
1,caryes,phoneno,catis,.....,kitehello
2,abchello,defyes,hijno,....,pothelp
输入文件有 1400 万行。有人可以帮助提供有效的方法吗?提前致谢。
答案1
我不知道它的效率有多高,但是您可以使用匿名数组的散列来执行类似的操作,使用 amap
将字符串串联赋值.=
应用于每个散列值的每个元素:
perl -F, -nle '
$k = shift @F;
map { $h{$k}[$_] .= $F[$_] } 0..$#F
}{
for $k (sort { $a <=> $b } keys %h) {
print join ",", $k, @{ $h{$k} }
}' file
key,c1,c2,c3......,cn
1,caryes,phoneno,catis,..............,kitehello
2,abchello,defyes,hijno,.............,pothelp