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

Awk技术问询:如何打印含gene=的列及其前一列(带eC_number)

解决方案

这里给你调整后的Awk代码,既满足提取gene=字段的需求,又能同时输出它的前一列,而且只会处理包含gene=的行:

awk -F '	|;' '{
    # 初始化变量,避免残留上一行的内容
    found = 0
    prev_col = ""
    gene_col = ""
    
    # 从第9列开始遍历字段(和你原逻辑一致)
    for(i=9; i<=NF; i++){
        # 找到第一个以gene=开头的字段
        if($i ~ /^gene=/){
            prev_col = $(i-1)  # 记录前一列内容
            gene_col = $i       # 记录当前gene字段
            found = 1           # 标记该行有符合条件的字段
            break               # 找到第一个就跳出循环,要最后一个的话去掉这行
        }
    }
    
    # 只有找到gene=字段的行才输出结果
    if(found){
        print prev_col, gene_col
    }
}' file

关键细节说明:

  • 字段分隔符:保持你原来的\t(制表符)和;,确保能正确拆分目标文件里的字段格式
  • 第一个/最后一个匹配:代码里加了break,会取第一个出现的gene=字段;如果你的需求是取最后一个匹配的,删掉break即可
  • 过滤无gene=的行:通过found标志位,确保只有包含gene=的行才会输出,避免空行或无效内容
  • EC_number适配:不管前一列是不是EC_number,代码都会输出它;如果你只想保留前一列是EC_number的情况,可以把判断条件改成:
    if($i ~ /^gene=/ && $(i-1) ~ /^EC_number=/)
    

你可以先用目标文件的小样本测试下,看看输出是否符合预期~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:09:12