我想比较两个文件的差异,并忽略一个文件中存在但另一个文件中缺失的行。
例如
文件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