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

如何用单条awk命令按%ID规则过滤基因表格指定行

单条awk命令实现基因表格过滤

以下是满足需求的单条awk命令,可直接处理你的基因表格:

awk '
BEGIN {OFS="\t"}
NR==1 {header=$0; next}
$1 ~ /^gene[ABC]$/ {
    ids[$1] = $2
    lines[$1] = $0
    next
}
{other_lines[++n] = $0}
END {
    print header
    # 找出geneA/B/C中%ID最高的基因
    max_val = -1
    target = ""
    for (gene in ids) {
        if (ids[gene] + 0 > max_val) {
            max_val = ids[gene] + 0
            target = gene
        }
    }
    # 输出保留的目标基因行
    if (target != "") print lines[target]
    # 输出所有非geneA/B/C的行
    for (i=1; i<=n; i++) {
        print other_lines[i]
    }
}' input.txt

命令逻辑说明

  1. BEGIN块:设置输出字段分隔符为制表符,确保输出表格格式与输入一致
  2. 表头处理:第一行是表头,单独保存后跳过后续处理
  3. geneA/B/C收集:匹配到geneA、geneB、geneC的行时,将它们的%ID值和整行内容分别存入数组,跳过非目标处理
  4. 其他基因保存:非geneA/B/C的行全部存入另一个数组保留
  5. END块过滤输出:
    • 遍历geneA/B/C的%ID值,找出数值最大的那个基因
    • 先输出表头,再输出保留的目标基因行
    • 最后输出所有非geneA/B/C的基因行

示例验证

针对你提供的输入表格:

geneID%ID
geneE99
geneA95
geneD93
geneC70
geneB89
geneF89

执行命令后,会筛选出%ID最高的geneA,过滤掉geneB和geneC,最终输出:

geneID%ID
geneE99
geneA95
geneD93
geneF89

(注:你提供的期望结果中缺失了geneD,推测是笔误,按照规则geneD不属于geneA/B/C范畴,应当保留)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:23:12