2012-10-29 170 views
0

我需要comapre兩個文件f1.txt和f2.txt,並獲得匹配和非匹配,對於這種情況,我希望匹配兩個文件的第一個字段。首先打印f2.txt的第二個字段,然後打印整行f1.txt。並且在f2.txt中找不到找到匹配的「Not Found」,然後打印整行f1.txt。awk比較2個文件,打印匹配和區別

F1.txt

1;2;3;4;5;6;7;8 
1a;2;3;4;5;6;7;8 
1b;2;3;4;5;6;7;8 
2b;2;3;4;5;6;7;8 

F2.txt

1;First 
1a;Firsta 
1b;Firstb 

所需的輸出:

First;1;1;2;3;4;5;6;7;8 
Firsta;1a;1a;2;3;4;5;6;7;8 
Firstb;1b;1b;2;3;4;5;6;7;8 
Not Found;2b;2;3;4;5;6;7;8 

我能夠獲得比賽,但不是非比賽

awk -F ";" -v OFS="";"" "NR==FNR{a[$1]=$2;next}a[$1]{print a[$1],$0}" f2.txt f1.txt 

感謝

+0

爲什麼OFS雙雙引號? –

+0

@glennjackman我正在使用Windows Awk版本,這是雙引號的原因,問候 – Eduardo

回答

3

這應該這樣做:

awk -F";" 'NR==FNR{a[$1]=$2;next}{if (a[$1])print a[$1],$0;else print "Not Found", $0;}' OFS=";" f2.txt f1.txt 
+0

謝謝你,完美的工作。 – Eduardo

+1

@sarathi:你爲什麼取出OFS並硬編碼分號?任何具體原因? – Guru

+0

@大師,我回到你的修訂版。不要害怕空白,它大大有助於可讀性。 –

0

這是非常有用的。 我已經改變了一點,以獲得2個文件之間的數據,每個文件只有1列。

awk 'BEGIN { OFS=FS=";" } FNR==NR { array[$1]=$1; next } { print ($1 in array ? array[$1] : "Not Found"), $0 }' file1 file2 
相關問題