Linux:比较两个文件但不关心仅限内容的内容

时间:2016-06-05 22:58:48

标签: linux diff comm

我正在尝试使用comm或diff Linux命令来比较不同的文件。每个文件都有一个卷名列表。文件A有1500卷,文件B有相同的1500卷加上另外200卷,总共1700卷。我正在寻找找到那200卷。我不在乎卷是否匹配并且在不同的行上,我只想要不匹配的卷但是diff和comm命令似乎只是逐行比较。有没有人知道另一个命令或使用comm或diff命令查找这200个卷的方法吗?

两个文件的前5行:(顺便说一句,每行只有一个卷,因此文件A有1500行,文件B有1700行)

档案A:

B00004
B00007
B00010
B00011
B00013

档案B:

B00003   
B00004   
B00007    
B00008    
B00010 

所以我希望命令只显示前5行的B00003和B00008,因为那些卷不在文件A中

2 个答案:

答案 0 :(得分:1)

尝试

comm -23 <( sort largerFile) <(sort smallerFile) 

这假设您的Vol名称将是第一个&#34;字段&#34;在数据中。如果没有,请检查man sort有关在备用字段(和字段组合)上对文件进行排序的方法。

<( ....)构造称为过程替换。如果您使用的是旧的shell / unix或缩减功能的shell(破折号?),则可能无法使用进程替换。然后,您必须在运行comm之前对文件进行排序,并管理您对未排序文件的操作。

请注意,comm -23表示&#34;抑制第二个文件的输出&#34; ( - 2)和&#34;抑制两个共同文件的输出&#34; (-3),其余输出是file1中不在file2中的差异。这就是我首先列出largerFile的原因。

IHTH

答案 1 :(得分:1)

awk也可以提供帮助。

 awk  'NR==FNR {a[$1]=$1; next}!($1 in a) {print $0}' fileA fileB