AWK比较两个文件,如果匹配,则将第二个文件中的新列添加到第一个文件

时间:2016-02-10 13:28:58

标签: awk printing compare

我有问题我想比较两个文件。第一个文件是参考:

ABCA4 INHR
AMT   INHR
BTK   ONKO1
PAP   ONKO2

第二个文件用于比较:

3  1:2 T ENG1  ABCA4 ff
3  1:2 T ENG1  ABCA4 gg
5  1:4 A ENG20 AMT   ll
6  1:5 G ENG12 BRB   ds
7  1:6 T ENG8  PAP   rg 
7  1:6 T ENG8  PAP   tt

我想比较第一个文件中的$ 1和第二个文件中的$ 5,如果第二个文件中的$ 5和$ 6之间的匹配打印,则第一个文件中的$ 2:

    3  1:2 T ENG1  ABCA4 INHR  ff
    3  1:2 T ENG1  ABCA4 INHR  gg
    5  1:4 A ENG20 AMT   INHR  ll
    6  1:5 G ENG12 BRB     -   ds
    7  1:6 T ENG8  PAP   ONKO2 rg 
    7  1:6 T ENG8  PAP   ONKO2 tt

所有列均以制表符分隔。 感谢

2 个答案:

答案 0 :(得分:1)

你可以这样做:

awk 'NR==FNR{a[$1]=$2;next}{$5=$5 "\t" (a[$5]?a[$5]:"-")}1' file1 file2

细节:

NR==FNR {     # when the first file is processed
    a[$1]=$2  # store the second field in an array with the first field as key
    next      # jump to the next record
}
{
    $5=$5 "\t" (a[$5]?a[$5]:"-") # append a tab and the corresponding second
                                 # field from the first file if it exists or -
}
1 # true, display the line

答案 1 :(得分:1)

用同样的逻辑awk。输出由制表符分隔。

awk -v OFS="\t" 'FNR==NR{a[$1]=$2;next}{if (a[$5]) $5=$5"\t"a[$5]; else $5=$5"\t""-"}1' file1 file2

输出,制表符分隔:

3       1:2     T       ENG1    ABCA4   INHR    ff
3       1:2     T       ENG1    ABCA4   INHR    gg
5       1:4     A       ENG20   AMT     INHR    ll
6       1:5     G       ENG12   BRB     -       ds
7       1:6     T       ENG8    PAP     ONKO2   rg
7       1:6     T       ENG8    PAP     ONKO2   tt