![计算列中连续相同的字段数](https://linux22.com/image/161348/%E8%AE%A1%E7%AE%97%E5%88%97%E4%B8%AD%E8%BF%9E%E7%BB%AD%E7%9B%B8%E5%90%8C%E7%9A%84%E5%AD%97%E6%AE%B5%E6%95%B0.png)
我的输入文件如下所示:
bio, john
chem, john
lang, john
math, dina
math, john
math, matt
lang, matt
我只想对名称连续相同的行进行一次计数。对于这个输入,我想得到:
john 2
dina 1
matt 1
有什么办法可以使用 sed 或 awk 来做到这一点吗?我完全迷失在这里了。
答案1
如果你想要快速而肮脏的东西,你可以使用uniq
去重复的连续条目,然后排序+计算重复项:
$ cut -d, -f2 file | uniq | sort | uniq -c
1 dina
2 john
1 matt
答案2
将先前的值存储在变量中,如果值不同,则增加关联数组中的数字。
awk -F ', ' '{if ($2 != p) { c[$2]++ } p=$2}
END { for (k in c) {print k, c[k]} }'