列の値をカンマで区切るには?

列の値をカンマで区切るには?

次の単一値列を含む入力ファイルがあります。

入力ファイル:

B00000|1|def|b12  
B00001|1|xyz|
B00000|1||b11  
B00001|1|def|ab1  
B00001|2|ghi|bc2  
B00002|1|abc|ac1  
B00002|1|xyz|bc2  

出力を取得するには、1列目と2列目に基づいて3列目と4列目のデータを分離する必要があります。

出力:

B00000|1|def|b11,b12  
B00001|1|def,xyz|ab1  
B00001|2|ghi|bc2  
B00002|1|abc,xyz|ac1,bc2  

ベストアンサー1

#!/usr/bin/gawk -f
BEGIN          { OFS=FS="|"}

a[$1][$2][3]   { a[$1][$2][3] = a[$1][$2][3] "," $3;
                 a[$1][$2][4] = a[$1][$2][4] "," $4;
                 next }

               { a[$1][$2][3] = $3;
                 a[$1][$2][4] = $4   }

END            { for (b in a)
                    for(c in a[b]) print b,c,a[b][c][3],a[b][c][4] }

awk対応部分については、以下の@dave_thompson_085の説明を参照してください(1D配列を使用)。

おすすめ記事