diff的奇怪行为grep | SED

时间:2013-02-04 13:44:28

标签: linux bash unix sed grep

我的目标是提取File1中不存在的File2

中的那些行

我们说File1

String A
String B
String C

我们说File2

String B
String C

行已排序,输出应为:

String A

所以我为它写了这个命令:

diff File1 File2 | grep '^<' | sed 's/< //g'

对我的样本文件工作正常,有10 - 20行。

我也试过这个命令:

grep -Fxv -f File2 File1

这也适用于我的示例文件。

但问题是:

它似乎不适用于我的实际数据集,即每个约100万行的两个文件。

发生了什么事?我忽略了什么?该怎么办?

4 个答案:

答案 0 :(得分:6)

这是comm工具的用途:

$ comm -23 file1 file2
String A

答案 1 :(得分:1)

试试这个:

awk 'NR==FNR{a[$0];next}!($0 in a)' file2 file1

如果这适用于您的实际文件?

答案 2 :(得分:0)

听起来你可能有空白问题。

你试过了吗?

diff -uBb File1 File2

从手册页:

   -b  --ignore-space-change
          Ignore changes in the amount of white space.

   -B  --ignore-blank-lines
          Ignore changes whose lines are all blank.

答案 3 :(得分:0)

您的两个文件是否已排序?如果数据乱序,diff无法工作...
检查:

diff -uBb <(sort File1) <(sort File2)

注意:重新加入答案。