2013-05-21 172 views
1

我有兩個文件,比如說file1file2,要比較並放在file3用awk命令比較兩個文件

file1

red 
green 
blue 
red 
yellow 
pink 
orange 

file2

domain1,red,- 
domain2,-,green 
domain3,blue,- 
domain4,yellow,pink 
domain5,grey,orange 

現在我需要輸出爲file3如下:

domain1,red 
domain2,green 
domain3,blue 
domain1,red 
domain4,yellow 
domain4,pink 
domain5,orange 

對於file1每個記錄,如果匹配,它需要產生$1作爲必填項,並且匹配值爲$2$3file2,如果兩個($ 2,$ 3)匹配,則它應該在兩個記錄(單個記錄也可以)中爲「domain5,pink,orange」。

我是awk命令的新手。請幫我用awk實現這個!

我有這個簡單的命令,它不sufficing我的病情

awk 'NR==FNR{x[$1];next}($2,$3) in x' FS=',' file1 file2 >file3 
+0

請解釋爲什麼有兩個'域1,在輸出red'?錯字? – Kent

+0

因爲我在file1中有兩次紅色,紅色的搜索模式發生兩次。 – user2407164

+0

呃..我現在看到..我的答案隱式刪除重複,不正確...刪除.. – Kent

回答

3
awk -F, 'BEGIN{OFS=","} 
     NF>1 {s[$2]=s[$3]=$1;} 
     NF==1 {print s[$1],$1}' input2 input1 

輸出

domain1,red 
domain2,green 
domain3,blue 
domain1,red 
domain4,yellow 
domain4,pink 
domain5,orange 
+0

您的確需要OP。整潔的代碼+1 – Kent

+0

嗨,上面的awk命令只給出了上述OP所需的第二列。 – user2407164

+0

我不明白你的意思。你能給個例子嗎? – perreal