获取与数字出现次数编译的重复次数

获取与数字出现次数编译的重复次数

我有一个大文件,其中包含这样的数字数据

123
124
124
124
126
127
127

我想获得重复的总数(从多次出现的每个数字中计算)。输出应为 5 as(124 重复 3 次,127 重复两次)。我可以使用它来计算重复次数cat file | sort | uniq -d | wc -l,但它给出的输出为 2,即两个数字重复(124 和 127),我想要输出 5。

答案1

awk 'seen[$0]++ {count += (seen[$0]==2 ? 2:1)} END {print count+0}' file

如果以前见过某行,count则增加 2 或 1(基于该行是否是第一个重复行)。最后打印count+0以便 awk 打印 0 而不是空字符串,以防 casecount从未增加)。

另一种方法:

awk '{count += seen[$0]; seen[$0] = (seen[$0]?1:2)} END {print count}' file

不要增加看到的数组值,而是使用数组提供 count 应增加的量 - 第一次看到一行时不增加,第二次出现时增加 2,然后每次重复出现时增加 1。

答案2

既然你标记了你的问题操作系统你可能有 GNU 实现uniq,它有一个-D选项:

   -D     print all duplicate lines

所以

$ sort file | uniq -D | wc -l
5

答案3

您可以使用awk以下方法来计算数字:

sort file | uniq -dc | awk '{n+=$1}END{print n}'

输出:

5

(这里不需要cat,因为sort接受输入)

如果您uniq不支持-dc,那么

sort file | uniq -c | awk '$1>1{n+=$1}END{print n}'

答案4

尝试过以下方法

awk '{a[$1]++}END{for(x in a){print x,a[x]}}' ppp| awk '$2 >1{sum=sum+$2}END{print sum}'

输出

awk '{a[$1]++}END{for(x in a){print x,a[x]}}' ppp| awk '$2 >1{sum=sum+$2}END{print sum}'
5

添加Python方法

#!/usr/bin/python
m=open('ppp','r')
j=[]
f=[]
for i in m:
    if i.strip() not in j:
        j.append(i.strip())

e=open('ppp','r')
for i in e:
    f.append(i.strip())

r=0
for w in j:
    if f.count(w) >1:
        r=r+f.count(w)

print r


output
5

相关内容