我有4個文件按字母順序排序,A,B,C和D. 這些文件在每行上包含一個字符串。 從本質上講,需要做的是,B中得到任何東西從A 刪除的,其結果將在隨後C. 被剝奪的東西,同樣,那結果將被剝奪D.使用Linux命令對兩個文件執行「減」操作
的是有一種使用Linux命令的方法?
我有4個文件按字母順序排序,A,B,C和D. 這些文件在每行上包含一個字符串。 從本質上講,需要做的是,B中得到任何東西從A 刪除的,其結果將在隨後C. 被剝奪的東西,同樣,那結果將被剝奪D.使用Linux命令對兩個文件執行「減」操作
的是有一種使用Linux命令的方法?
comm
好這一點,無論是:
cat B C D | sort | comm -2 -3 A -
或:
comm -2 -3 A B | comm -2 -3 - C | comm -2 -3 - D
取決於什麼是更容易/更清晰的腳本。
我想說這是迄今爲止給出的答案中最簡單的答案。 – 2009-09-03 02:10:48
grep -x -v -f B A | grep -x -v -f C | grep -x -v -f D
-v開關是逆匹配(即匹配所有除外)。 -f開關將一個文件與一個模式列表進行匹配。 -x開關強制它匹配整行(以便作爲其他行的子字符串的行不會導致較長的行被刪除)。
看看join
命令。閱讀它的手冊頁,你應該找到你想要的。
join A B | join - C | join - D
這不是完全相反,你想要什麼?這會給你所有四個文件中存在的行。此外,如果您的任何線條中有空格,則不起作用。 – 2009-09-03 02:00:22
是的。對不起,直接加入應該這樣做。 – biznez 2009-09-03 02:03:02
但仍然...我不是專家加入,但從閱讀手冊頁,加入AB會給你所有在A和B,而不是A,但不是B,這是你問的。從我可以告訴基於連接的答案到你原來的問題會是這樣的:'join -t \ n -v 1 A B | join -t \ n -v 1 - C | join -t \ n -v 1 - D' – 2009-09-03 02:07:54
差異可能會起作用。你爲什麼給出提示但問問題?這是功課嗎? – 2009-09-03 01:20:45
不是。事實上,如果你給它正確的標誌,差異將起作用。但我不確定旗幟。 – biznez 2009-09-03 01:33:59