如何对前两列中的匹配数据进行分组

如何对前两列中的匹配数据进行分组

我想按如下方式对前两个字段的数据进行分组

样本数据:

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 ',' '|'如果您的输入没有逗号字符,您可以使用早期版本。

相关内容