+ -
当前位置:首页 → 问答吧 → 请教一个awk条件合并两个文本的问题

请教一个awk条件合并两个文本的问题

时间:2011-04-26

来源:互联网

$ head a b
==> a <==
ETM2-0            1 XM-0-0-2    0RAL2   RALT2-0&&-31               0
                                            1RAL2   RALT2-32&&-63              1
==> b <==
0RAL2    IEX     WO         
1RAL2    IEX     WO         
   
$ awk 'NR==FNR{a[$1]=$3}NR>FNR{print $0"     "a[$1]}' b a
result

ETM2-0            1 XM-0-0-2    0RAL2   RALT2-0&&-31               0
                                            1RAL2   RALT2-32&&-63              1  WO

                                
问题:0RAL2   RALT2-0&&-31               0缺少对应状态,怎么办?
即我想得到的结果是
ETM2-0            1 XM-0-0-2    0RAL2   RALT2-0&&-31               0  WO
                                            1RAL2   RALT2-32&&-63              1  WO


请各位帮助,谢谢!

作者: conall   发布时间: 2011-04-26

  1. awk 'NR==FNR{a[$1]=$3}NR>FNR{c=NF==6?a[$4]:a[$1];print $0"\t"c}' b a
复制代码

作者: lkk2003rty   发布时间: 2011-04-26

awk 'NR==FNR{a[$1]=$3;next}{print $0,NF==3?a[$1]:a[$4]}' b a

作者: yinyuemi   发布时间: 2011-04-26

谢谢lkk2003rty (小毛孩) ,黑哥也帮助进行了解答:awk 'NR==FNR{a[$1]=$3}NR>FNR{i=NF==3?$1:$4;print $0"     "a[i]}'  b a。基本类似,但是能否解答一下,谢谢!

作者: conall   发布时间: 2011-04-26

i=NF==3?$1:$4相当于
if(NF==3) i=$1;else i=$4
c=NF==6?a[$4]:a[$1] 相当于
if(NF==6) c=a[$4];else c=a[$1

作者: conall   发布时间: 2011-04-26