2016-10-12 28 views
0

我想了解awk從兩個不同文件的字段比較。 (所有文件製表符分隔)比較兩個文件(理解)

一號文件:

1 11796321 
1 169549811 
1 173917078 
2 48962782 
4 121696962 
4 121697011 

第二個文件:

a 0 1 2 0 b 1 11796321 a 
b 0 1 0 2 c 1 11800000 bd 
c a d 0 0 2 4 121696962 0 

OUTPUT:

b 0 1 0 2 c 1 11800000 bd 

所以我想比較$ 1和第2從第1檔到第7檔和第8欄在第2檔中打印並打印無與倫比。

我想:

awk -v OFS="\t" -F '\t' 'FNR==NR{a[$1,$2]; next} ($7,$8) in a {next} {print $0}' file1 file2 

你能幫助理解其中的錯誤,我怎麼能比較這文件嗎? 謝謝。

+0

沒有什麼不對您發佈的腳本,它將工作正如你所說你想在任何POSIX awk中使用。它以什麼方式不適合你? –

回答

1

如果兩個文件分隔符是相同的(<tab>),你可以試試這個:

awk -F '\t' 'FNR==NR{k=$1 FS $2;a[k];next} !($7 FS $8 in a)' file1 file2 
+0

它完美的作品。所以起初我必須定義k,FS(\ t)在哪裏,並將其放入數組a中,這是由k定義的,然後是比較...是不是? – Vonton

+0

@fedulka你能報告你首先使用哪個awk版本嗎? – Kent

+0

awk version 4.0.1 – Vonton

1

變化

$ awk -v OFS="\t" -F'\t' 'FNR==NR{a[$1,$2]; next} !(($7,$8) in a)' file1 file2 
+0

謝謝,您的腳本運行良好。始終有效。謝謝 – Vonton

+0

你沒有使用'OFS',所以不需要設置它。 –