(キー)列に基づいて複数のフィールドを個別に結合

(キー)列に基づいて複数のフィールドを個別に結合

次のようにタブ区切りのテストデータがあります。

    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

おすすめ記事