0

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

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

档案一:

B00004
B00007
B00010
B00011
B00013

文件 B:

B00003   
B00004   
B00007    
B00008    
B00010 

因此,我希望命令仅从前 5 行向我显示 B00003 和 B00008,因为这些卷不在文件 A 中

4

2 回答 2

1

尝试

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

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

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

Note that as comm -23 means "suppress output from 2nd file" (-2) and "suppress output from the two files in common" (-3), the remaining output is differences found in file1 that are not in file2. This is why I list largerFile first.

IHTH

于 2016-06-05T23:14:31.830 回答
1

awk can also help.

 awk  'NR==FNR {a[$1]=$1; next}!($1 in a) {print $0}' fileA fileB
于 2016-06-06T01:49:12.157 回答