使用 awk 或 perl 根据 csv 文件中的键折叠行

使用 awk 或 perl 根据 csv 文件中的键折叠行

输入 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

相关内容