Unix环境下使用awk/sed将.fam文件最后一列替换为.txt文件V8列的方法
实现方法
你需要的按ID匹配替换列的功能可以直接用awk一行命令完成,命令如下:
awk 'NR==FNR{if(NR>1) id_map[$2]=$NF; next} {if($2 in id_map) $NF=id_map[$2]; print}' your_data.txt your_data.fam > outcome.fam
命令逻辑说明
- 先读取txt文件:跳过txt的表头行,将每行的第二列(ID列V2)作为索引,最后一列(V8列)作为值存入字典
- 再读取fam文件:匹配到对应ID时,将fam的最后一列替换为字典中存储的对应V8值,逐行输出到结果文件
运行上述命令后生成的outcome.fam就和你给出的预期结果完全一致,等价于R中按ID merge后替换列的效果。
内容的提问来源于stack exchange,提问作者Aryh
相关产品推荐
相关产品推荐

