比较并忽略一个文件中缺少的行

比较并忽略一个文件中缺少的行

我想比较两个文件的差异,并忽略一个文件中存在但另一个文件中缺失的行。

例如

文件1:

foo
bar
baz
bat

文件2:

foo
ball
bat

我目前正在运行以下 diff 命令

diff File1 File2 --changed-group-format='%>' --unchanged-group-format=''

在这种情况下将产生

bar
baz

作为输出,即仅打印缺失或冲突的行。我想仅打印冲突的行,即忽略 File2 中缺少一行而 File1 中存在一行的情况(而不是相反)。有没有办法使用 diff 来做这样的事情,还是我必须求助于其他工具?如果是这样,你会推荐什么?

答案1

你也可以看看comm,如果你有的话:

comm [-1] [-2] [-3 ] file1 file2
-1 Suppress the output column of lines unique to file1.
-2 Suppress the output column of lines unique to file2.
-3 Suppress the output column of lines duplicated in file1 and file2.

输入文件应该排序。但是,您可以使用 --nocheck-order 选项(如果可用)修改默认行为。

在你的情况下你会想要comm --nocheck-order -23 file filter_file

答案2

当您说冲突时,您是指同时出现在 File1 和 FIle2 中的条目吗?

如果是,请使用以下命令 -

创建一个名为 mycmopare.sh 的 shell 脚本并将以下内容放入其中。

#!/bin/bash
File1Contents=$(cat File1)

for i in $File1Contents; do
   grep $i File2
done

从存储 File1 和 File2 的目录运行 mycompare.sh。

输出:

foo
bat

相关内容