2013-08-05 43 views
1

首先,哪個是最好且最快的unix命令來獲得兩個文件之間的差異?我嘗試使用差異來做到這一點(下文)。在unix中複製兩個文件之間的差異

我試圖通過Neilvert諾瓦爾在這裏給出了答案 - Compare two files line by line and generate the difference in another file

碼 -

diff -a --suppress-common-lines -y file1.txt file2.txt >> file3.txt 

但是,我得到了很多的空間和>符號也不同行之前。我如何解決這個問題?我正在考慮刪除尾部空格和第一個'>',但不確定這是否是一個簡單的修復。

我FILE1.TXT有 -

Hello World! 
Its such a nice day! 
#this is a newline and not a line of text# 

我FILE1.TXT有 -

Hello World! 
Its such a nice day! 
Glad to be here! 
#this is a newline and not a line of text# 

輸出 - 「#Many空間位置#>高興到這裏來:)」

預計產量 -很高興在這裏:)

+2

您是否在第二個答案中看到了'comm'命令? – squiguy

+0

@squiguy - 是的,但那種文本。我不想分類文本中的差異。我想這樣。 – Steam

+0

'diff -u'是顯示文本文件差異的通用方式,大多數開發人員都很熟悉並且工具得到廣泛支持。你只想要第一個文件中不存在的第二個文件中的行嗎?那些重複的行呢? –

回答

3

另一種獲得方式差異是通過使用AWK:

awk 'FNR==NR{a[$0];next}!($0 in a)' file1 file2 

儘管我必須承認,我沒有運行任何基準,並不能說這是最快的解決方案。

+0

如何運行基準測試? – Steam

+0

您可以在網上搜索一些找到2個文件差異的基準。 – anubhava

+0

順便說一句,你能解釋fnr,nr等的含義嗎?我第一次看到這個awk。 – Steam

1

-y diff選項使它產生一個「並排」差異,這就是爲什麼你有空間。對於統一格式,使用上下文的零行嘗試-u 0。這應該打印:

+Glad to be here:) 

加號表示該行被添加,而減號表示被刪除。

+0

會附加大量不必要的數據...日期等。 – Steam

-1
diff -a --suppress-common-lines -y file1.txt file2.txt|tr 'a >' '' |awk '{print $1}' >>file3.txt 
+0

由於這可能會解決問題,請提供有關如何和爲什麼的其他信息。 –