2016-03-01 64 views
1

我有文件file1file2,其中file2file1的子集。這意味着,如果我遍歷file1,也有一些線路是在file2,有的都沒有,但在file2沒有網上說是不是在file1。文件中可能有幾行文本中具有相同的內容。現在我想知道它們之間的區別,即file1的所有行不在file2之間。沒有排序的兩個文件之間的差異

根據this well received answer

的diff(1)不是答案,COMM(1)是。

(無論出於何種原因)

但據我瞭解,爲comm的文件需要先進行排序。問題:兩個文件都是有序的(不是排序!),並且這個順序需要保留。所以我真正想要的是遍歷file1,並檢查每一行,如果它也在file2。如果不是,請將其寫入file3。如果同一內容出現多次,應該保留多次!

有沒有辦法用命令行來做到這一點?

回答

3

與GNU的grep試試這個:

grep -vFf file2 file1 > file3 

更新

grep -vxFf file2 file1 > file3 
+0

看起來看第一行後良好。我無法確定地說(文件太長),但我認爲這是解決方案。謝謝! –

+0

嗯好吧我只是比較行號。它應該是5213,但它是5211.不幸的是,非常小的差異,但並不完全正常工作。 –

+0

請將file1和file2上傳到某處。 – Cyrus

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*>.//' 
+0

我不想排序,因爲我想保留訂單。 –

+0

我添加了一個替代沒有排序 –