我比较了两个长度不同的文件,首先发现了文件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