You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用awk计算新值并将其存入文件的新列new_MAF?

实现awk添加MAF计算新列的正确脚本

我有一个6列的file.txt文件,内容如下:

CHROM   ID  REF ALT ALT_FREQS   OBS_CT
1   rs376342519:10616:CC:C  CC  C   0.995708    3862
1   1:54712:T:TTTTC T   TTTTC   0.595903    3862
1   rs368808541:603010:C:A  C   A   0.00194132  3862
1   1:625248:CA:C   CA  C   0.00326171  3862
1   1:746828:AGG:A  AGGATTGCTGAC    A   0.00364759  3862
1   1:774926:GAC:G  GAC G   0.000900845 3862
1   1:775682:G:A    G   A   0.00183606  3862
1   rs149821290:781367:A:C  A   C   0.00493168  3862
1   rs139691522:800053:A:G  A   G   0.69276305  3862

需求:根据第5列ALT_FREQS的值生成新列new_MAF,规则为:

  • 若ALT_FREQS > 0.5,则new_MAF = 1 - ALT_FREQS
  • 若ALT_FREQS ≤ 0.5,则new_MAF = ALT_FREQS
    将新列追加到原文件末尾,期望输出如下:
CHROM   ID  REF ALT ALT_FREQS   OBS_CT  new_MAF
1   rs376342519:10616:CC:C  CC  C   0.995708    3862  0.004292
1   1:54712:T:TTTTC T   TTTTC   0.595903    3862    0.404097
1   rs368808541:603010:C:A  C   A   0.00194132  3862   0.00194132
1   1:625248:CA:C   CA  C   0.00326171  3862   0.00326171
1   1:746828:AGG:A  AGGATTGCTGAC    A   0.00364759  3862  0.00364759
1   1:774926:GAC:G  GAC G   0.000900845 3862  0.000900845
1   1:775682:G:A    G   A   0.00183606  3862  0.00183606
1   rs149821290:781367:A:C  A   C   0.00493168  3862   0.00493168
1   rs139691522:800053:A:G  A   G   0.69276305  3862   0.30723695

当前使用的awk脚本仅能输出计算后的数值,无法合并到原文件:

awk '{if ($5 > 0.5) print 1 - $5 else print $5}' file.txt > newfile.txt

解决方案

修改awk脚本,在打印时保留原行的所有内容,再追加计算后的new_MAF值:

awk 'NR==1{print $0,"new_MAF"; next} {maf = $5 > 0.5 ? 1 - $5 : $5; print $0, maf}' file.txt > newfile.txt

脚本说明

  • NR==1{print $0,"new_MAF"; next}:处理第一行表头,在原表头后追加new_MAF列名,然后跳过后续逻辑直接处理下一行
  • maf = $5 > 0.5 ? 1 - $5 : $5:使用三元运算符简化条件判断,计算得到new_MAF的值
  • print $0, maf:打印原行所有内容,再追加计算后的maf值,自动用空格分隔列

内容的提问来源于stack exchange,提问作者HKJ3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:00:47