在一个文件中查找重复行并计算每行重复的行数?

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

123 123 234 234 123 345 

我想找出'123'被复制了多less次,'234'被复制了多less次等等。理想情况下,输出将是:

 123 3 234 2 345 1 

假设每行有一个数字:

 sort <file> | uniq -c 

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

 sort <file> | uniq --count 

这将只打印重复行 ,与计数:

 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 

对于给定的input,输出是:

  3 123 2 234 1 345 

为了sorting频率最高的输出 ,您可以执行以下操作(获取所有结果):

 sort FILE | uniq -c | sort -nr 

或者,只得到重复的行,最频繁的第一行:

 sort FILE | uniq -cd | sort -nr 

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

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

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

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

要么:

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

通过awk :

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

awk 'dups[$1]++'命令中,variables$1包含column1的全部内容,方括号是数组访问。 因此,对于data文件中每一行的第一列,名为dups的数组的节点增加。

最后,我们用num作为variables循环dups数组,并首先打印保存的数字,然后通过dups[num]打印重复值的dups[num]

请注意,您的input文件在一些行的末尾有空格,如果您清除了这些空格,则可以使用$0代替上面的$1命令:)

假设您有权访问标准的Unix shell和/或cygwin环境:

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

基本上:将所有空格字符转换为换行符,然后对转换后的输出进行sorting,然后将其输出到uniq并计算重复的行数。

在使用“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