2016-07-06 220 views
0

我有文件1爲AWK比較兩個文件

blah blah cool 
fold bold match 
ed ted bled 

文件2作爲

blah ha cool 
fold bold match 
ed ted bled 

我要輸出的行僅當第二個字段不匹配,像這樣

blah ha cool 

但是,我得到這個:

blah ha cool 
fold bold match 
ed ted bled 

繼承人我嘗試:

$ awk -F'\t' 'NR==FNR{a[$1]=$0;next} $1 in a{split(a[$1],r); if (r[2] != 2) print $0 FS "false"; else next;}' file1 file2 

我的猜測是,我不會遞增,荷蘭國際集團通過關聯數組正確..

+1

你真的只需要在數組中存儲'$ 2',而不是整行。 – shawnt00

+0

對不起!我正在從一個更大的例子開始工作,因爲我正在處理其他領域,所以我確實需要存儲該行。 – yaman

+1

那麼你想'r [2]!= $ 2'。我認爲這是問題。 – shawnt00

回答

3

據我瞭解,你要打印的文件2行的第二列與file1中相應行中的第二列不同。如果是這樣的情況下:

$ awk 'FNR==NR{a[NR]=$2; next} $2!=a[FNR]' file1 file2 
blah ha cool 

FNR==NR{a[NR]=$2; next}其行數的項下保存在陣列a file1中的第二場的每個值。 $2!=a[FNR]打印file2中第二個字段與file1的第二個字段不同的同一行中的任何一行。

2

由線對比線,假設製表符分隔的數據

$ paste file1 file2 | awk '$2!=$5' 

blah blah cool blah ha cool 

僅報告文件2記錄

$ paste file1 file2 | awk '$2!=$5' | cut -f4- 

blah ha cool 

該解決方案將非常大的文件正常工作。