我有兩個文件A和B.我想找到A中不在B中的所有行。在bash /使用標準linux實用程序中執行此操作的最快方法是什麼?這是我迄今爲止的嘗試:如何找到兩個文件的設置差異?
for line in `cat file1`
do
if [ `grep -c "^$line$" file2` -eq 0]; then
echo $line
fi
done
它的工作,但它很慢。有沒有更快的方法來做到這一點?
我有兩個文件A和B.我想找到A中不在B中的所有行。在bash /使用標準linux實用程序中執行此操作的最快方法是什麼?這是我迄今爲止的嘗試:如何找到兩個文件的設置差異?
for line in `cat file1`
do
if [ `grep -c "^$line$" file2` -eq 0]; then
echo $line
fi
done
它的工作,但它很慢。有沒有更快的方法來做到這一點?
The BashFAQdescribes doing exactly this with comm,其是標準地正確的方法。
# Subtraction of file1 from file2
# (i.e., only the lines unique to file2)
comm -13 <(sort file1) <(sort file2)
DIFF是用於此任務不太合適,因爲它試圖在塊而不是單個線操作;因此,它必須使用的算法更復雜,而且內存效率更低。
comm自從SUS2(1997)以來一直是part of the Single Unix Specification。
這正是我一直在尋找的!謝謝! – spinlok
這是一個方便的程序。我以前沒見過那個。我不知道我的前任系統管理員錯過了什麼其他的shell應用程序的小寶石。 – 2012-05-07 22:00:05
'diff'程序是查看文件之間差異的標準unix程序。
% cat A
a
b
c
d
% cat B
a
b
e
% diff A B
3,4c3
< c
< d
---
> e
用一個簡單的grep和削減一個可以選擇一個行,而不是B.注意傷口比較簡單和線條的空間會拋出其關閉......但概念是存在的。
% diff A B | grep '^<' | cut -f2 -d" "
c
d
你可能會顯示一些代碼或解釋你試過的嗎?現在的問題使你看起來像你希望我們爲你做所有的工作。通常情況下,顯示代碼將有助於鼓勵更多的答案和更好的結果。 – jmort253
你也應該定義你所期望的「最快」。這是關於處理時間或編寫代碼的時間。第二,我會去做一些像'diff A B |的東西grep'^ - '' – tonio
@ jmort253,謝謝,我編輯了問題以添加更多詳細信息 – spinlok