awk两个文件对比

最简单的方式是使用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
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

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

猜你喜欢

转载自lishichang.iteye.com/blog/2207543