最简单的方式是使用linux的comm命令,但是需要文件有序,comm命令的参数:
-1 不显示只在第1个文件里出现过的列。 -2 不显示只在第2个文件里出现过的列。 -3 不显示只在第1和第2个文件里出现过的列。
comm命令是一个非常简洁的命令,其只有两个参数。不过三个参数也结常要组合使用,我们常用的用法如下:
comm - 12 就只显示在两个文件中都存在的行; comm - 23 只显示在第一个文件中出现而未在第二个文件中出现的行; comm - 123 则什么也不显示。
也可以使用awk命令实现
1.同时在file1和file2中的行
awk '{if(ARGIND==1) {val[$0]}else{if($0 in val) print $0}}' file1 file2
awk '{if(ARGIND==1) {val[$0]}else{if($0 in val) print $0}}' file1 file2
2.只在file1中有的行.
awk '{if(ARGIND==1) {val[$0]}else{if($0 in val) delete val[$0]}}END{for(i in val) print i}' file1 file2
awk '{if(ARGIND==1) {val[$0]}else{if($0 in val) delete val[$0]}}END{for(i in val) print i}' file1 file2
3.只在file2中有的行.
awk '{if(ARGIND==1) {val[$0]}else{if($0 in val) delete val[$0]}}END{for(i in val) print i}' file2 file1