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

如何统计第一列中第二列内容的出现次数(支持动态列名)

问题描述

现有如下格式的文本文件:

col1 col2
Me apple
You banana
Me banana
Me apple
You banana
Me coconut 
He coconut
Me coconut 

需要统计每一行第一列对象对应第二列内容的出现次数,期望输出结果:

Me has 2 apple
You has 2 banana
Me has 1 banana
Me has 2 coconut
He has 1 coconut 

尝试过sort和uniq命令但未得到预期结果,且两列的列名是动态的(不固定为col1/col2),求解决方法。

解决方法

方法1:用awk直接统计(推荐)

awk处理这种键值对统计非常顺手,还能自动跳过表头:

awk 'NR>1 {count[$1,$2]++} END {for (key in count) {split(key, arr, SUBSEP); printf "%s has %d %s\n", arr[1], count[key], arr[2]}}' your_file.txt
  • NR>1:跳过第一行的表头
  • count[$1,$2]++:把(第一列值,第二列值)作为唯一标识,累计出现次数
  • END块:遍历所有统计结果,拆分标识后按要求的格式输出

如果需要输出顺序和示例一致(按第一列、第二列排序),可以加上排序步骤:

awk 'NR>1 {count[$1,$2]++} END {for (key in count) print key SUBSEP count[key]}' your_file.txt | sort | awk -F '\034' '{printf "%s has %d %s\n", $1, $3, $2}'

方法2:结合sort和uniq实现

之前用这两个命令没成功,大概率是没处理好表头和统计逻辑,试试这个组合:

tail -n +2 your_file.txt | sort | uniq -c | awk '{printf "%s has %d %s\n", $2, $1, $3}'
  • tail -n +2:先跳过第一行的表头
  • sort:把相同的第一列 第二列组合排在一起
  • uniq -c:统计每组的出现次数(次数会被放在行首)
  • 最后用awk调整输出格式,把次数移到中间,换成要求的句式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:42:18