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

如何基于TSV文件INFO列的AF_SAS条件过滤行

筛选TSV文件中满足AF_SAS条件的行

需求说明

有一个大型制表符分隔(TSV)文件,第8列(INFO列)包含多个用;分隔的key=value对,需筛选出满足AF_SAS = 0或AF_SAS < 0.05条件的行。

解决方案

使用awk工具处理,它适合处理大型文本文件,无需加载整个文件到内存,执行效率较高。

核心思路

  1. 以制表符作为列分隔符,识别文件的各列;
  2. 直接输出标题行;
  3. 对数据行拆分INFO列的键值对,提取AF_SAS对应的数值;
  4. 判断数值是否符合条件,符合则输出整行。

命令实现

脚本形式(便于复用)

将以下代码保存为filter_af_sas.awk:

BEGIN { FS = "\t" }
# 输出标题行
NR == 1 { print; next }
{
    # 拆分INFO列的键值对
    n = split($8, info_pairs, ";")
    af_sas_value = -1
    # 遍历查找AF_SAS的值
    for (i = 1; i <= n; i++) {
        if (info_pairs[i] ~ /^AF_SAS=/) {
            split(info_pairs[i], kv, "=")
            af_sas_value = kv[2] + 0  # 转换为数值类型
            break
        }
    }
    # 判断条件并输出
    if (af_sas_value == 0 || af_sas_value < 0.05) {
        print
    }
}

执行命令:

awk -f filter_af_sas.awk input.tsv > output.tsv

单行命令形式

直接在终端运行:

awk 'BEGIN{FS="\t"} NR==1{print;next} {n=split($8,info,";");af=-1;for(i=1;i<=n;i++){if(info[i]~/^AF_SAS=/){split(info[i],kv,"=");af=kv[2]+0;break}} if(af==0 || af<0.05) print}' input.tsv > output.tsv

结果验证

针对提供的测试TSV文件,该命令会过滤掉AF_SAS=0.23415的行(第5行),生成与期望输出完全一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:40:35