我有五个文件,其中包含一些重复的字符串。
文件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
)?另外,我如何获得每个元素的重复次数。
答案 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
计算每条记录的出现次数(在这种情况下为字符),并打印出多于一次的记录。