Linux: 比较两个文件但不关心哪一行只包含内容

Linux: Comparing two files but not caring what line only content

我正在尝试使用 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 中

尝试

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

这假定您的 Vol 名称将是数据中的第一个 "field"。如果不是,请检查 man sort 以了解在替代字段(和字段组合)上对文件进行排序的方法。

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

请注意,由于 comm -23 表示 "suppress output from 2nd file" (-2) 和 "suppress output from the two files in common" (-3),其余输出是在 file1 中找到的差异不在文件 2 中。这就是为什么我首先列出 largerFile

IHTH

awk 也可以提供帮助。

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