最初の2つの列で一致するデータをグループ化する方法

最初の2つの列で一致するデータをグループ化する方法

最初の2つのフィールドのデータを次のようにグループ化したいと思います。

サンプル:

CHECK|checkadm|block1
CHECK|checkadm|block2
CHECK|checkadm|block3
CHECK|checkadm|block4
TEST|testadm|block1
TEST|testadm|block2
TEST|testadm|block3

最終出力

CHECK|checkadm|block1|block2|block3|block4
TEST|testadm|block1|block2|block3

答え1

どうすればいいですか?大量に各行の接続:

awk '
    BEGIN{FS="|"; OFS=""}
    {a[$1"|"$2]=a[$1"|"$2]"|"$NF}
    END{for (i in a) print i, a[i]}
' file

TEST|testadm|block1|block2|block3
CHECK|checkadm|block1|block2|block3|block4

答え2

そしてGNUデータの混合バージョン1.8(入力が既に質問の例のようにソートされていると仮定):

$ datamash -t'|' --collapse-delimiter='|' -g1,2 collapse 3 <ip.txt
CHECK|checkadm|block1|block2|block3|block4
TEST|testadm|block1|block2|block3

datamash -t'|' -g1,2 collapse 3 <ip.txt | tr ',' '|'入力にカンマ文字がない場合は、以前のバージョンを使用できます。

関連情報