【问题标题】:How to count number of occurencies of the same line?如何计算同一行的出现次数?
【发布时间】:2013-01-11 11:45:46
【问题描述】:

我的文件如下所示:

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

【问题讨论】:

    标签: bash uniq


    【解决方案1】:

    标准方式是:

    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
    

    【讨论】:

    • 谢谢,就是这样。但我最终发现我的问题是由 windows 行尾引起的,所以我对未来有点聪明:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多