You need to enable JavaScript to run this app. for循环中用grep提取bam文件行输出到带变量的文件结果为空如何解决
优惠活动
大模型
产品
解决方案
定价
更多

for循环中用grep提取bam文件行输出到带变量的文件结果为空如何解决

问题原因分析
  • 核心错误是grep的匹配参数额外嵌套了不必要的单引号:你写的grep "'${variable}'"在变量展开后,实际给grep的匹配规则是包裹了单引号的字符串,比如变量为mmu-let-7g-5p时,grep会尝试匹配内容里的'mmu-let-7g-5p'(带单引号),但samtools输出的内容中不存在带单引号的字符串,完全匹配不到目标行,因此输出的都是空白文件。
  • 可选优化点1:直接用cat读文件赋值给变量再遍历的写法,在变量包含特殊字符、文件换行异常时容易出错,更稳妥的写法是用while循环逐行读取variables.txt。
  • 可选优化点2:你当前直接把grep的文本输出命名为.bam后缀不规范:grep输出的是纯文本SAM格式,不是二进制BAM格式,如果需要生成合法的BAM文件,需要用samtools view把匹配到的SAM内容转成二进制BAM。
修正后的代码

基础修复版(输出SAM格式文本)

file="variables.txt"

# 逐行读取变量文件,兼容最后一行无换行符的情况
while IFS= read -r variable || [ -n "${variable}" ]
do
    samtools view sample.bam | \
    grep "${variable}" \
    > sample.${variable}.sam
done < "${file}"

输出合法BAM格式版

file="variables.txt"

while IFS= read -r variable || [ -n "${variable}" ]
do
    # 匹配后直接转成二进制BAM格式
    samtools view sample.bam | \
    grep "${variable}" | \
    samtools view -b -o sample.${variable}.bam -
done < "${file}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:12:02