当文件 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