1

我有看起来像这样的文件:

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 覆盖)所以我正在寻找另一种方法来做我需要的事情或建议如何修复我的脚本。

4

1 回答 1

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
于 2013-01-11T11:50:32.437 回答