2015-12-21 74 views
1

要求是比較兩個巨大的Unix文件,並寫入基於搜索幾個選項之後唯一的密鑰(第一場)在第三檔的差異得到了下面的命令:在Unix中比較兩個巨大的文件

awk 'FNR==NR{a[$0];next}!($0 in a)' hosts.csv masterlist.csv>results.csv 

雖然這給出了區別,如果對於一個字段,一個文件包含NULL(作爲一個詞)和其他空/空值爲空值如何忽略這個命令並比較其他字段?

也想用這樣的選項做一個通用的腳本或實用程序,不需要代碼,但只是一個建議會有所幫助。

+0

是'diff'不是一種選擇? –

+1

請發表[mcve],否則這太抽象了,不知道你在找什麼。 – fedorqui

+1

@commuSoft:試用sdiff -W ...但是也需要忽略Null。所以檢查我們是否有更好的方法 – Vinod

回答

0

嘗試使用二進制比較它們。如果您將文件壓縮爲二進制文件(序列化),則可以非常快速地進行比較。如果存在差異,則可以通過該文件並使用類似的方法比較它們以檢查它們的源代碼。希望這有助於

2

你可以嘗試在此修復您的awk

awk 'FNR==NR{if ($0 !~ /NULL| *|^$/){a[$0]}next}!($0 in a)' hosts.csv masterlist.csv>results.csv 

由於@fedorqui表明,在評論,這裏是另一種選擇:

awk 'FNR==NR{if ($0 !~ /NULL/ && NF){a[$0]}next}!($0 in a)' hosts.csv masterlist.csv>results.csv 
+0

將嘗試此操作並更新... – Vinod

+1

您可能會檢查'NF'來擺脫空行或僅有空格的行。 – fedorqui

+0

不錯的漁獲@fedorqui – klashxx