两个文件之间的差异没有排序

时间:2016-03-01 07:03:01

标签: bash shell diff difference comm

我有file1file2个文件,其中file2file1的子集。这意味着,如果我迭代file1file2中有一些行,有些行不是,但file2中没有行不在file1 file1。文件中可能有多行具有相同的内容。现在我希望得到它们之间的差异,即file2comm以外的所有行。

根据this well received answer

  

diff(1)不是答案,comm(1)是。

(无论出于何种原因)

但据我了解,对于file1,需要先对文件进行排序。问题:两个文件都是有序的(未排序!),需要保留此顺序。所以我真正想要的是迭代file2,并检查每一行,如果它也在file3。如果没有,请将其写入SELECT * FROM table_name WHERE `date_time` BETWEEN DATE_ADD(NOW(), INTERVAL -30 MINUTE) AND NOW(); 。如果同一内容出现不止一次,则应保留多次!

有没有办法用命令行执行此操作?

2 个答案:

答案 0 :(得分:3)

尝试使用GNU grep:

grep -vFf file2 file1 > file3

<强>更新

grep -vxFf file2 file1 > file3

答案 1 :(得分:0)

我认为你不想排除避免临时文件。这可以通过流程替换来实现:

diff <(sort file1) <(sort file2)
# or
comm <(sort file1) <(sort file2)

编辑:使用https://stackoverflow.com/a/4544925/3220113我找到了另一种选择(对于短行的文本文件):

diff -a --suppress-common-lines -y file2 file1 | sed 's/\s*>.//'