在文件中找到重复的行,并计算每一行重复了多少次?

假设我有一个类似于下面的文件:

123
123
234
234
123
345

我想知道'123'重复了多少次,'234'重复了多少次,等等。 所以理想情况下,输出应该是这样的:

123  3
234  2
345  1
685593 次浏览

假设每行有一个数字:

sort <file> | uniq -c

你也可以在GNU版本中使用更详细的--count标志,例如在Linux上:

sort <file> | uniq --count

假设你可以访问一个标准的Unix shell和/或cygwin环境:

tr -s ' ' '\n' < yourfile | sort | uniq -d -c
^--space char

基本上:将所有空格字符转换为换行符,然后对转换后的输出进行排序并将其提供给uniq并计数重复的行。

要查找和计数多个文件中的重复行,您可以尝试以下命令:

sort <files> | uniq -c | sort -nr

或者:

cat <files> | sort | uniq -c | sort -nr

这将是只打印重复的行,带有计数:

sort FILE | uniq -cd

或者,使用GNU long选项(在Linux上):

sort FILE | uniq --count --repeated

BSD和OSX,你必须使用grep上过滤掉唯一的行:

sort FILE | uniq -c | grep -v '^ *1 '

对于给定的示例,结果将是:

  3 123
2 234

如果你想要打印所有行的计数包括那些只出现一次的:

sort FILE | uniq -c

或者,使用GNU long选项(在Linux上):

sort FILE | uniq --count

对于给定的输入,输出为:

  3 123
2 234
1 345

为了使最频繁的行在顶部的对输出排序,您可以执行以下操作(以获得所有结果):

sort FILE | uniq -c | sort -nr

或者,为了只得到重复的行,先得到最频繁的行:

sort FILE | uniq -cd | sort -nr

在OSX和BSD上,最后一个变成:

sort FILE | uniq -c | grep -v '^ *1 ' | sort -nr

通过# EYZ0:

awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data

awk 'dups[$1]++'命令中,变量$1保存了column n1的全部内容,方括号是数组访问。因此,对于data文件中每一行的第一列,名为dups的数组的节点将递增。

最后,我们循环使用num作为变量的dups数组,并首先打印保存的数字,然后通过dups[num]打印它们的复制值的数量。

注意,你的输入文件在一些行结束有空格,如果你清除了这些,你可以使用$0代替上面的命令中的$1:)

在Windows中,使用“Windows powershell”;,我使用下面提到的命令来实现这一点

Get-Content .\file.txt | Group-Object | Select Name, Count

此外,我们还可以使用where-object Cmdlet来过滤结果

Get-Content .\file.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select Name, Count

要查找重复的计数,使用这个命令:

sort filename | uniq -c | awk '{print $2, $1}'