You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单条awk命令实现同列记录合并及记录数量统计

嘿,你这个需求其实不用拆成两条命令,在同一个awk脚本里就能搞定!先理清楚你的场景:

首先是输入文件f的内容:

$ cat f
a a1
a a2
a a3
b b1
b b2
b b3
b b4
c c1
c c2
c c3

你已经能用这条awk命令把同一键的对应值合并输出:

$ awk '{a[$1]=a[$1]OFS$2} END {for (k in a) print k ,a[k]}' f
a a1 a2 a3
b b1 b2 b3 b4
c c1 c2 c3

现在要在每行末尾追加对应值的数量,直接在脚本里加个计数数组就行,试试这条单命令:

$ awk '{a[$1] = a[$1] OFS $2; count[$1]++} END {for (k in a) print k a[k], count[k]}' f
a a1 a2 a3 3
b b1 b2 b3 b4 4
c c1 c2 c3 3

简单说下逻辑:

  • 每读一行,除了用a[$1]拼接当前键对应的所有值,同时用count[$1]++给这个键的计数加1,一步完成拼接和统计
  • 处理完所有行后,遍历每个键k,输出键+拼接好的值,再跟上对应的计数就搞定了

如果不想用额外的计数数组,也可以用split函数拆分拼接后的字符串来统计数量,但这种方法对大文件来说效率会低一点,毕竟每次都要拆分字符串:

$ awk '{a[$1] = a[$1] OFS $2} END {for (k in a) {split(a[k], tmp); print k a[k], length(tmp)}}' f

相比你原来的管道方法,单条awk命令只需要遍历一次文件,效率更高,代码也更紧凑。

内容的提问来源于stack exchange,提问作者VIPIN KUMAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:17:17