计算多个文件中的重复项

Count duplicates from several files

我有五个文件,其中包含一些重复的字符串。

文件 1:

a

文件 2:

b

文件 3:

a
b

file4:

b

文件5:

c

所以我用了awk 'NR==FNR{A[[=15=]];next}[=15=] in A' file1 file2 file3 file4 file5

并打印 $ a,但如您所见,b 字符串在其他文件中重复了 3 次,但仅打印 a.

那么如何使用一行命令从 analysing/comparing 每个文件中获取所有重复的字符串 (a b)?另外我如何获得每个元素的重复次数。

我建议使用 GNU sort 和 uniq:

sort file[1-5] | uniq -dc

输出:

2 a
3 b

来自man uniq

-d: only print duplicate lines

-c: prefix lines by the number of occurrences

您可以使用其中之一;

awk '{count[[=10=]]++}END{for (a in count) {if (count[a] > 1 ) {print a}}}' file1 file2 file3 file4 file5

awk 'seen[[=11=]]++ == 1' file1 file2 file3 file4 file5

您可以针对 a=3 和 b=4 进行测试。

awk '{count[[=12=]]++} END {for (line in count) if ( count[line] == 3 && line == "a" || count[line] == 4 && line == "b" ) {print line} }' file1 file2 file3 file4 file5

测试:

$ awk '{count[[=13=]]++}END{for (a in count) {if (count[a] > 1 ) {print a}}}' file1 file2 file3 file4 file5
a
b


$ awk 'seen[[=13=]]++ == 1' file1 file2 file3 file4 file5
a
b

$ awk '{count[[=13=]]++} END {for (line in count) if ( count[line] == 2 && line == "a" || count[line] == 3 && line == "b" ) {print line, count[line]} }' 1 2 3 4 5
a 2
b 3

在 awk 中:

$ awk '{ a[]++ } END { for(i in a) if(a[i]>1) print i,a[i] }' file[1-5]
a 2
b 3

它计算每条记录(在本例中为字符)的出现次数,并打印出计数大于 1 的记录。