找到2列不同文件之间的匹配,并用awk替换第三列

时间:2017-09-05 08:36:46

标签: awk

如果两个ID列匹配,我正在寻找替换文件中的列的方法。 我有档案A.txt

c     a   b   ID
0.1  0.01 5   1
0.2  0.1  6   2
0.3       2   3

和档案B.txt

ID   a   b
1   10   15
2   20   16
3   30   12
4   40   14

我正在寻找的输出是 档案A.txt

ID a    b   
1  0.01 5   
2  0.1  6   
3   30  2   

我发现可以使用以下内容

awk 'NR==FNR{ if(NR>1) a[$1]=$2; next }
     FNR>1 && $1 in a && NF<3{ f=$2; $2=a[$1]; $3=f }1' B.txt A.txt | column -t

但问题是它比较两个文件的1美元。我怎样才能将$4A.txt的{​​{1}}与$1的{​​{1}}进行比较

我尝试了以下

B.txt

但它没有用。有办法解决吗?谢谢

1 个答案:

答案 0 :(得分:0)

awk 解决方案:

awk 'NR==FNR{ if(NR>1) a[$1]=$2; next }
     FNR==1{ print $NF,$2,$3; next }   # output the header line rearranged
     FNR>1 && ($NF in a){ $1=$NF; if(NF<4) { f=$2; $2=a[$1]; $3=f } else $NF="" 
     }1' B.txt A.txt | column -t

输出:

ID  a     b
1   0.01  5
2   0.1   6
3   30    2