假设我有一个类似于下面的文件:
123
123
234
234
123
345
我想知道123被复制了多少次,234被复制了多少次,等等。 所以理想情况下,输出应该是这样的:
123 3
234 2
345 1
假设我有一个类似于下面的文件:
123
123
234
234
123
345
我想知道123被复制了多少次,234被复制了多少次,等等。 所以理想情况下,输出应该是这样的:
123 3
234 2
345 1
当前回答
awk的道路:
awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data
在awk 'dups[$1]++'命令中,变量$1保存了column n1的全部内容,方括号是数组访问。因此,对于数据文件中每一行的第一列,名为dups的数组的节点都是递增的。
最后,我们在dups数组上循环使用num作为变量,并首先打印保存的数字,然后通过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}'
要查找和计数多个文件中的重复行,您可以尝试以下命令:
sort <files> | uniq -c | sort -nr
or:
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
awk的道路:
awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data
在awk 'dups[$1]++'命令中,变量$1保存了column n1的全部内容,方括号是数组访问。因此,对于数据文件中每一行的第一列,名为dups的数组的节点都是递增的。
最后,我们在dups数组上循环使用num作为变量,并首先打印保存的数字,然后通过dups[num]打印其复制值的数量。
注意,你的输入文件在某些行结尾有空格,如果你清除这些空格,你可以在上面的命令中使用$0来代替$1:)