我的文件看起来像这样:
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>
答案 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