2012-03-01 82 views
9

我想編寫一個bash腳本或幾個shell命令來解決我的問題。我有兩個文件,old.txt,new.txt。我想生成一個diff.txt文件,它只包含已更改或新建的行。舉例來說,如果我有:比較兩個文件並保留新的或更改的行

old.txt:

Sierra 
Tango 
Oscar 
Victor 
Whiskey 
Yankee 

new.txt:

Sierra 
Tango 
Echo 
Osc__ar 
Victor 
Uniform 
Whiskey 
Yan__kee 

我想一個diff.txt,看起來像這樣:

Echo 
Osc__ar 
Uniform 
Yan__kee 

對於透視圖,我正在編寫此腳本以幫助我創建差分Motorolla S2記錄,以便通過串行端口將程序加載到embe dded電腦。我知道bash相當好,我只是不知道從哪裏開始。

回答

8
$ awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt 
Echo 
Osc__ar 
Uniform 
Yan__kee 
16
$ grep -v -f old.txt new.txt 
Echo 
Osc__ar 
Uniform 
Yan__kee 
+0

真棒,這工作,但如果兩個文件具有空行輸出是空的。同樣對於我要區分的完整文件,我會得到「grep:無效的後向引用」 – portforwardpodcast 2012-03-01 04:05:52

+1

@portforwardpodcast在舊文件中是否有任何可以解釋爲正則表達式的內容? – chrisaycock 2012-03-01 04:08:27

+0

雅我完全做。大量的斜槓和開始和點等我認爲awk是我的方式去:) – portforwardpodcast 2012-03-01 04:12:13

0

這裏是如何只有新線,改變使用diff線:

$ cat file.txt file2.txt 
line 1 
line 2 
line 3 
line 4 
line 5 
line 5 
$ cat file2.txt 
line 1 
line 2 
line 3 
line 4b 
line 5 
line 6 

$ diff --changed-group-format='***%>' --unchanged-group-format='' --new-group-format='+++%>' file.txt file2.txt 
***line 4b 
+++line 6 
相關問題