比较两个不同长度文件之间的Common Values (Linux)



我比较了两个长度不同的文件,首先发现了文件1中存在而文件2中不存在的唯一id。

然而,现在我想在文件之间找到共同的唯一值,我已经看到多次使用comm命令,然而,这些文件的长度不相同。

文件1:

2 
4 
6 
8 
10

文件2:

9
8
7
6
5
4
3
2
1

所需输出:

2 
4 
6 
8 

对于查找唯一差异,我使用了以下命令:

awk 'FNR==NR {a[$0]++; next} !($0 in a)' file1.sorted file2.sorted > diff_values.txt

对于查找通用值,我尝试使用以下命令,但不完全确定这是否是正确的方法,或者是否存在任何替代方法:

comm -12 file1.sorted file2.sorted > comm_values.txt

使用comm有很多选择,就像在Unix中做任何事情有很多选择一样,但是comm是设计用来做您所要求的事情的工具。

常见的线:

$ comm -12 <(sort file1) <(sort file2)
2
4
6
8

不同的行:

$ comm -3 <(sort file1) <(sort file2)
1
10
3
5
7
9

只在第一个文件中的行:

$ comm -23 <(sort file1) <(sort file2)
10

只在第二个文件中的行:

$ comm -13 <(sort file1) <(sort file2)
1
3
5
7
9

如果你想要其他的脚本,这里有一些可供选择的脚本,你可以考虑并适应你想做的任何事情:

$ awk 'NR==FNR{a[$0]; c[$0]; next} {b[$0]; c[$0]} END{for (i in c) if ((i in a) && (i in b)) print i}' file1 file2
2
4
6
8
$ awk 'NR==FNR{a[$0]; c[$0]; next} {b[$0]; c[$0]} END{for (i in c) if (!((i in a) && (i in b))) print i}' file1 file2
1
3
5
7
9
10
$ awk 'NR==FNR{a[$0]; c[$0]; next} {b[$0]; c[$0]} END{for (i in c) if ((i in a) && !(i in b)) print i}' file1 file2
10
$ awk 'NR==FNR{a[$0]; c[$0]; next} {b[$0]; c[$0]} END{for (i in c) if (!(i in a) && (i in b)) print i}' file1 file2
1
3
5
7
9

最新更新