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

入力ファイルには1,400万行があります。誰でも効率的な方法を提供するのに役立ちますか?よろしくお願いします。

答え1

どのくらい効率的かはわかりませんが、各ハッシュ値の各要素にmap文字列接続の割り当てを使用して、匿名配列のハッシュとして同様の操作を実行できます。.=

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

関連情報