使用 awk 匹配并替换列

使用 awk 匹配并替换列

当文件 1 的第 1 列与文件 2 的第 2 列匹配时,我需要将文件 2 的第 13 列替换为文件 1 的第 2 列。

文件1

AAAA00000687697 HPNMS
AAAA00000693037 GER112
AAAA00000349750 FRA0158

文件 2

585     AAAA00000687697 1    +       11868   14409   14409   14409   3       11868,12612,13220,      12227,12721,14409,      0       BBBB00000223972 none    none    -1,-1,-1,
585     AAAA00000693037 1    +       11871   14412   14412   14412   3       11871,12612,13224,      12227,12721,14412,      0       BBBB00000223972 none    none    -1,-1,-1,
585     AAAA00000349750 1    +       11873   14409   14409   14409   4       11873,12594,13402,13660,        12227,12721,13655,14409,        0       BBBB00000223972 none    none    -1,-1,-1,-1,

输出应该是这样的

585     AAAA00000687697 1    +       11868   14409   14409   14409   3       11868,12612,13220,      12227,12721,14409,      0       HPNMS           none    none    -1,-1,-1,
585     AAAA00000693037 1    +       11871   14412   14412   14412   3       11871,12612,13224,      12227,12721,14412,      0       GER112          none    none    -1,-1,-1,
585     AAAA00000349750 1    +       11873   14409   14409   14409   4       11873,12594,13402,13660,        12227,12721,13655,14409,        0       FRA0158 none    none    -1,-1,-1,-1,

我尝试了下面的代码

 awk 'NR==FNR{a[$1]=$2;next} $2 in a {$13=a[$1];print}' FS='\t' OFS='\t' file1.txt file2.txt  > output.txt

它打印文件 2,其中第 13 美元为空列。

当我尝试单独打印 a[$1] 时,它打印一个空文件;当我删除第一个大括号中的下一部分时,它只能打印 a[$1]。我不知道为什么保存数组时遇到一些麻烦。

答案1

如果可用,只需替换$13为数组字符串:a[$2]

awk 'NR==FNR{a[$1]=$2;next}($2 in a){$13=a[$2]}1' file1 file2 

相关内容