基于外部Pseudo_ID文件生成GWAS表型病例/对照列的Linux实现
全基因组关联分析(GWAS)表型文件处理方案(Linux命令实现)
需求背景
现有包含44k研究对象的主文件(列顺序:FID、IID、Pseudo_ID),需新增第4列ICD_10,赋值规则:
- 匹配病例文件中Pseudo_ID的行赋值1
- 匹配对照文件中Pseudo_ID的行赋值0
- 其余行赋值NA
假设文件命名:
- 主文件:
all_samples.txt - 病例Pseudo_ID文件:
cases.txt(每行一个ID) - 对照Pseudo_ID文件:
controls.txt(每行一个ID)
分步解决(对应你的三个问题)
1. 构建Pseudo_ID与表型值的映射文件
先把病例和对照的ID分别对应1和0,生成临时映射文件,方便后续关联:
# 生成病例ID到1的映射 awk '{print $0, 1}' cases.txt > pheno_map.txt # 追加对照ID到0的映射 awk '{print $0, 0}' controls.txt >> pheno_map.txt
2. 处理主文件:新增表头+关联赋值+填充NA
用awk一次性完成三个需求,命令如下:
awk ' BEGIN {OFS=" "} # 设置输出列分隔符为空格(匹配示例输出格式) # 第一步:读取映射文件,将ID和对应值存入数组map NR==FNR {map[$1]=$2; next} # 第二步:处理主文件 FNR==1 {print $0, "ICD_10"; next} # 给第一行表头追加ICD_10 { # 匹配到映射的输出对应值,否则输出NA if ($3 in map) print $0, map[$3] else print $0, "NA" } ' pheno_map.txt all_samples.txt > final_pheno.txt
示例验证
用你提供的示例数据测试:
all_samples.txt内容:
FID IID Pseudo_ID 1 150023532 E78GJHI 1 150023457 E96GH25 1 150075826 E56HFT7 1 150065943 EH87HN7 1 150034923 ENM8H53
cases.txt内容:
E78GJHI ENM8H53
controls.txt内容:
E96GH25 EH87HN7
执行上述命令后,final_pheno.txt的输出与你期望的一致:
FID IID Pseudo_ID ICD_10 1 150023532 E78GJHI 1 1 150023457 E96GH25 0 1 150075826 E56HFT7 NA 1 150065943 EH87HN7 0 1 150034923 ENM8H53 1
内容的提问来源于stack exchange,提问作者Julia
相关产品推荐
相关产品推荐

