如何计算同一行的出现次数?

时间:2013-01-11 11:45:47

标签: bash uniq

我的文件看起来像这样:

1747834 222
1747834 222
1747834 222
1747834 222
2514112 32636
2514112 32636
2514112 32636

对于每一行,我想计算其出现次数并将其写入第三列,每行应按新行划分:

1747834 222 4

2514112 32636 3

我设法编写了这个脚本:

while read line; do a=`grep "$line" input | wc -l`; echo -e ${line}; echo -e "${a}\n"; done < input_uniq

其中input_uniq是

的输出
 cat input | uniq

但不幸的是我得到了这样的输出:

1747834 222
4

2514112 32636
3

如果我只使用一个回声,输出很奇怪(基本上,$ line在开头被$ a覆盖)所以我正在寻找另一种方法来做我需要的或建议如何修复我的脚本。 / p>

1 个答案:

答案 0 :(得分:2)

标准方式是:

sort file | uniq -c 
      4 1747834 222
      3 2514112 32636

虽然行数附加到开头而不是结尾,所以这里有一个awk脚本来完成这个:

$ awk '{seen[$0]++}END{for (line in seen) print line, seen[line]}' file
1747834 222 4
2514112 32636 3