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[] 中的结果!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容