从多个文件中计算重复项

时间:2016-12-22 08:23:39

标签: linux bash awk terminal text-processing

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

文件1:

a

file2的:

b

file3的:

a
b

file4将

b

file5:

c

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

并打印$ a,但正如您所看到的那样,b字符串在其他文件中重复了3次,但只打印a

那么如何通过使用一行命令分析/比较每个文件来获取所有重复的字符串(a b)?另外,我如何获得每个元素的重复次数。

3 个答案:

答案 0 :(得分:4)

我建议使用GNU sort和uniq:

sort file[1-5] | uniq -dc

输出:

2 a
3 b

来自man uniq

  

-d:仅打印重复的行

     

-c:按出现次数排列前缀

答案 1 :(得分:2)

你可以使用其中一种;

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

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

你可以测试a = 3和b = 4。

awk '{count[$0]++} 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[$0]++}END{for (a in count) {if (count[a] > 1 ) {print a}}}' file1 file2 file3 file4 file5
a
b


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

$ awk '{count[$0]++} 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

答案 2 :(得分:2)

在awk中:

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

计算每条记录的出现次数(在这种情况下为字符),并打印出多于一次的记录。