在文件中查找重复的行并计算每行复制的时间长度?

时间:2011-07-15 19:53:01

标签: file count find duplicates lines

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

123 
123 
234 
234 
123 
345

我想知道有多少次'123'重复,有多少次'234'重复,等等。 理想情况下,输出就像:

123  3 
234  2 
345  1

7 个答案:

答案 0 :(得分:694)

假设每行有一个数字:

sort <file> | uniq -c

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

sort <file> | uniq --count

答案 1 :(得分:357)

这将仅打印重复的行,其中包含计数:

sort FILE | uniq -cd

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

sort FILE | uniq --count --repeated
BSD and OSX you have to use grep

过滤掉唯一的行:

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

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

  3 123
  2 234

如果您想打印所有行的计数,包括仅出现一次的那些:

sort FILE | uniq -c

或者,使用GNU长选项(在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

答案 2 :(得分:68)

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

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

或:

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

答案 3 :(得分:27)

通过

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

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

最后,我们使用dups作为变量循环遍历num数组并首先打印已保存的数字,然后按{{1}打印它们的重复值数量}。

请注意,您的输入文件在某些​​行的末尾有空格,如果您清除它们,则可以在上面的命令中使用dups[num]代替$0:)

答案 4 :(得分:11)

在使用“Windows PowerShell”的Windows中我使用下面提到的命令来实现此目的

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

答案 5 :(得分:6)

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

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

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

答案 6 :(得分:0)

要查找重复计数,请按照您的要求使用以下命令:

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