如何使用awk依据另一文件的映射关系替换指定文件的IID字段值
awk实现IID字段替换方案
可直接运行的命令
如果你的文件是普通空格分隔,使用以下命令即可:
awk 'NR==FNR{map[$2]=$1;next} FNR==1{print;next} {$2=map[$2];print}' 文件2.txt 文件1.txt > 替换后结果.txt
如果你的文件是制表符(Tab)分隔,想要保留原文件的分隔格式,使用以下版本:
awk 'BEGIN{FS=OFS="\t"} NR==FNR{map[$2]=$1;next} FNR==1{print;next} {$2=map[$2];print}' 文件2.txt 文件1.txt > 替换后结果.txt
逻辑说明
- 先读取映射文件(文件2):
NR==FNR判断当前处理的是第一个输入文件即文件2,将每行第二个字段(旧IID)作为键、第一个字段(新id)作为值存入map数组,读完当前行直接跳过后续逻辑处理下一行 - 再处理待替换文件(文件1):
- 第一行是表头,直接打印不做修改
- 其余行将第二列(IID字段)替换为map数组中对应的新id值,再打印整行
- 最终结果输出到
替换后结果.txt中,不会修改原文件,可放心测试
内容的提问来源于stack exchange,提问作者HKJ3
相关产品推荐
相关产品推荐

