次のようにタブ区切りのテストデータがあります。
A 1 2
B 3 4
B 5 6
C 7 8
次のように、列1の重複値に基づいて列2と3を結合(集計)したいと思います。
A 1 2
B 3;5 4;6
C 7 8
ここで、ソリューションに基づいて開発した作業コード(列1に基づいて複数行をマージ) は複数の列の値を個別にマージしません。
<test.txt awk -F"\t" '{OFS="\t"} {a[$1]=($1 in a)?a[$1]";"$2FS$3:$1FS$2FS$3} END{for(i in a){print a[i]}}'
A 1 2
B 3 4;5 6
C 7 8
誰かが私のコードのエラーを指摘するのを手伝ってくれたらとても感謝します。いくつかのバリエーションを試しましたが、正しい形式にすることはできません。
ベストアンサー1
各列に関連付けられた値を含めるには、別々の変数を使用します。
awk -F'\t' -v OFS='\t' '{
if ($1 in a) {
a[$1] = a[$1]";"$2;
b[$1] = b[$1]";"$3;
} else {
a[$1] = $2;
b[$1] = $3;
}
}
END { for (i in a) print i, a[i], b[i] }' < test.txt