2

我有文件file1file2,其中file2file1. 这意味着,如果我遍历file1,则有些行在 in file2,有些则不在,但没有行 infile2不在 in file1。一个文件中可能有几行内容相同。现在我想了解它们之间的区别,即所有行file1都不在file2.

根据这个广受欢迎的答案

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

(无论出于何种原因)

但据我了解,comm需要先对文件进行排序。问题:两个文件都是有序的(没有排序!),并且需要保持这个顺序。所以我真正想要的是迭代file1,并检查每一行,如果它也在file2. 如果没有,请将其写入file3. 如果相同的内容出现不止一次,就应该保留不止一次!

有没有办法用命令行来做到这一点?

4

2 回答 2

4

用 GNU grep 试试这个:

grep -vFf file2 file1 > file3

更新

grep -vxFf file2 file1 > file3
于 2016-03-01T07:13:46.347 回答
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*>.//'
于 2016-03-01T07:17:12.487 回答