计算多个文件中的重复项
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 的记录。
我有五个文件,其中包含一些重复的字符串。
文件 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 的记录。