AWK 实现多行合并

在满足【自定义】行相等情况下,对其它需要的字段做合并

场景:

之前 之后
A 1
A 2
B 3
C 4
C 5
C 6
==> A ('1', '2')
B ('3')
C ('4', '5', '6')

实现:

$ awk '{
lp[$1]=length(lp[$1])==0?"'\''"$2"'\''":lp[$1]", '\''"$2"'\''"
}
END{
for (var in lp)
print var, "("lp[var]")"
}
' Test.txt

原理

lp[] 可视为字典

首次访问时 lp[$1] 为空,赋值为 '$2',之后再次访问时,则赋值为 lp[$1] + , '$2'

具体执行过程:

1:lp[A]='1'
2:lp[A]='1', '2'
3:lp[A]='1', '2' lp[B]='3'
...
6:lp[A]='1', '2' lp[B]='3' lp[C]='4', '5', '6'

最后循环输出 lp[] 中的结果!

你可能感兴趣的:(AWK 实现多行合并)