我想按如下方式对前两个字段的数据进行分组
样本数据:
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 ',' '|'
如果您的输入没有逗号字符,您可以使用早期版本。