2013-05-21 135 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