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