2013-11-15 106 views
0

我有兩個文件a.unl和b.unl。內容是:Unix - 如何打印兩個文本文件之間的區別?

#a.unl 
300111 
302130 
300042 
300054 
400045 

#b.unl 
200032 
300042 
300111 
565000 
310056 

然後有c.unl來捕捉差異。 如果a.unl中的一行與b.unl中的一行匹配,則它不會打印到c.unl。只有當它不同時纔打印。 我怎麼能做到這一點?

非常感謝您的幫助。

+1

你可以使用'diff',也許? – 2013-11-15 04:08:50

回答

3

最好的辦法是對這兩個文件進行排序,然後在結果上運行comm。如果你有bash爲你的shell,你可以使用Process Substitution

comm -3 <(sort a.unl) <(sort b.unl) 

這將打印在a.unl所有的行,但不是在b.unl,在b.unl所有的行,但不是在a.unl(他們將通過一個標籤縮進); -3會抑制a.unlb.unl中的行。

如果沒有bash做,你可能需要類似:

sort a.unl > a.srt 
sort b.unl > b.srt 
comm -3 a.srt b.srt 
rm -f a.srt b.srt 

爲了讓更多的近防彈(所以如果你打斷東西它不圍繞離開中間文件),那麼你需要:

tmp=tmp.$$ 
trap "rm -f $tmp.?; exit 1" 0 1 2 3 13 15 

sort a.unl > $tmp.a 
sort b.unl > $tmp.b 
comm -3 $tmp.a $tmp.b 

rm -f $tmp.? 
trap 0 
+0

謝謝,這真的有用。順便說一句,我使用通訊-13和「排序a.unl -o a.unl」,所以我沒有不必要的文件躺在。 – junda

3

使用diff來顯示兩個文件之間的差異。

diff -u a.unl b.unl 

輸出的樣子:

--- a.unl  2013-11-15 13:51:00.936845493 +0800 
+++ b.unl  2013-11-15 13:51:21.373908098 +0800 
@@ -1,5 +1,5 @@ 
+200032 
+400042 
300111 
-302130 
-300042 
-300054 
-400045 
+565000 
+310056 

-手段從a.unl刪除,+手段添加到a.unl。
使用man diff獲取更多詳細信息。

相關問題