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

如何用awk过滤测序计数文件中样本列总和不足100的行?

使用AWK过滤计数文件:保留样本列总和≥100的行

没问题,这就给你一个简单直接的awk解决方案,完美适配你的需求:

核心命令

awk 'NR==1 {print; next} {sum=0; for(i=3;i<=10;i++) sum+=$i; if(sum>=100) print}' input.txt > filtered_output.txt

命令详解

让我拆解一下每个部分的作用,帮你理解逻辑:

  • NR==1 {print; next}:处理文件的第一行(表头行),直接打印输出,然后用next跳过后续计算逻辑——毕竟表头不需要统计总和。
  • sum=0:初始化总和变量,确保每一行的计算都是从0开始累加。
  • for(i=3;i<=10;i++) sum+=$i:遍历第3到第10列(对应你的S1到S8样本列),把每一列的数值加到sum里,计算当前行的样本总计数。
  • if(sum>=100) print:如果当前行的样本总计数≥100,就打印输出这一行;否则自动跳过。

通用化调整(可选)

如果你的样本列数量以后可能变化(比如新增S9、S10),可以把列数范围改成动态匹配当前行的所有列(从第3列开始到最后一列),这样命令更灵活:

awk 'NR==1 {print; next} {sum=0; for(i=3;i<=NF;i++) sum+=$i; if(sum>=100) print}' input.txt > filtered_output.txt

这里的NF是awk的内置变量,表示当前行的总列数,这样不管后面加多少样本列,命令都能自动适配。

效果验证

拿你给出的示例数据来说:

第一行数据列总和:0+1+1+8+1+0+1+5=17 → 低于100,会被过滤
第二行数据列总和:50+1+5+0+2+0+4+0=62 → 低于100,会被过滤
倒数第二行总和:0+0+5+7+5+47+2+2=68 → 低于100,会被过滤
最后一行总和:5+4+1+0+7+0+1+1=19 → 低于100,会被过滤

只有那些样本列总和≥100的行会被保留到filtered_output.txt中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:14:45