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