複数行を単一行に合計

複数行を単一行に合計

csvファイルの複数の行を1行にまとめる方法は?私はSQLでクエリを実行しましたが、うまくいきますが、Linuxで同じ効果を得る方法がわかりません。

私の現在のファイルは次のとおりです。

swainb02,Ben Swain,1015
swainb02,Ben Swain,1016
swainb02,Ben Swain,1018
swainb02,Ben Swain,1020
shaiks21,Sarah Shaikh,0073
shaiks21,Sarah Shaikh,0080
shaiks21,Sarah Shaikh,0082

複数のユーザーが複数の地域コードにアクセスできます。私が探しているのは、読みやすくするためのより簡単なバージョンのファイルです。

希望の出力:

swainb02,Ben Swain,1015,1016,1018,1020
shaiks21,Sarah Shaikh,0073,0080,0082

この問題を解決する方法を知っていますか?ありがとう

ベストアンサー1

入力が質問に示されているようにキー値にグループ化されているとし(最初に入力をソートしない場合)、すべてのUnixシステムのすべてのシェルでawkを使用すると、入力ファイルのサイズに関係なくほとんど問題はありません。メモリ使用:

$ cat tst.awk
BEGIN { FS=OFS="," }
{ curr = $1 OFS $2 }
curr != prev {
    printf "%s%s", ors, curr
    prev = curr
    ors = ORS
}
{ printf "%s%s", OFS, $3 }
END { printf ors }

$ awk -f tst.awk file
swainb02,Ben Swain,1015,1016,1018,1020
shaiks21,Sarah Shaikh,0073,0080,0082

おすすめ記事