You need to enable JavaScript to run this app. 基于后验平均基因型(PMG)计算等位基因频率的实现方法问询
优惠活动
大模型
产品
解决方案
定价
更多

基于后验平均基因型(PMG)计算等位基因频率的实现方法问询

基于PMG计算等位基因频率的AWK实现

核心代码

{
    # 初始化单行统计计数器
    num_denom = 0  # 对应公式分子项累计值
    valid_indiv = 0 # 有效参与统计的个体总数(排除NA)
    # 从第4列开始遍历所有个体的PMG值,跳过前3列非PMG信息
    for (i=4; i<=NF; i++) {
        pmg = $i
        # 跳过当前NA字段,继续处理后续列,不跳转行
        if (pmg == "NA") continue
        pmg_val = pmg + 0 # 转为数值避免字符串比较偏差
        # 严格按给定规则做PMG基因型分箱
        if (pmg_val >=0 && pmg_val <0.5) {
            # 纯合参考型
            num_denom += 1
            valid_indiv +=1
        } else if (pmg_val >=0.5 && pmg_val <1.5) {
            # 杂合型
            num_denom +=1
            valid_indiv +=1
        } else if (pmg_val >=1.5 && pmg_val <=2) {
            # 纯合变异型
            num_denom +=2
            valid_indiv +=1
        }
        # 超出PMG取值范围的异常值自动跳过,不纳入统计
    }
    total_allele = 2 * valid_indiv # 对应公式分母的总有效等位基因数
    # 处理无有效样本的除零异常
    if (total_allele == 0) {
        printf "\"%s\", \"NA\", NA\n", $1
        next
    }
    # 按要求格式输出结果:第一列值、有效等位数/总有效等位数、频率值
    printf "\"%s\", \"%d/%d\", %.6f\n", $1, num_denom, total_allele, num_denom/total_allele
}

功能适配说明

  • 自动适配可变列数:循环遍历到行尾总字段数位置,后续增减个体列无需修改代码
  • 自动识别并跳过所有值为NA的字段,不受NA数量影响
  • 严格执行PMG区间分箱规则,替代之前直接使用原始PMG值统计的偏差逻辑
  • 无任何中间结果输出,仅输出要求格式的最终统计值
  • 内置除零异常处理:当某行无有效统计个体时自动输出NA,避免程序报错

使用方法

将上述代码保存为pmg_freq.awk,执行以下命令即可得到结果:

awk -f pmg_freq.awk input_file.txt > result.txt

注意:代码默认使用awk原生空白分隔符适配大部分文本格式,如果输入文件为逗号、分号等固定分隔格式,只需在代码最开头添加BEGIN {FS="对应分隔符"}即可快速适配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 12:36:04