ファイル変換

ファイル変換

2つの列で構成されるファイルがあります。

A,val1
A,val2
A,val3
B,val1
B,val2
B,val3

私にとって必要なのは、最初の列のすべての固有値に対して、2番目の列が水平になるように出力を変換できることです。

A,val1,val2,val3
B,val1,val2,val3

BASHやAWKを使用するのが最善の方法かどうかはわかりません。両方を組み合わせたものかもしれません。誰でも正しい方向を教えてください。

ベストアンサー1

awkのみを使用:

$ awk -F, 'BEGIN{OFS=FS} {a[$1] = a[$1] == "" ? $2 : a[$1] FS $2} END {for(i in a) print i,a[i]}' file
A,val1,val2,val3
B,val1,val2,val3

出力順序は保証されません。 GNU awkで修正するのは簡単ですが、他の実装ではより難しいです。入力データをソートする必要はありません。

それ以外の場合は、GNU datamashを使用してください。

datamash -t, groupby 1 collapse 2 < file

(入力が揃っていない場合は追加-s)またはMillerを使用して

mlr --nidx --fs ',' nest --implode --values --across-records --nested-fs ',' -f 2 file

または、よりコンパクトで更新されたバージョン

mlr --nidx --fs ',' nest --ivar ',' -f 2 file

おすすめ記事