Linux/Bash循环处理BAM文件时生成唯一输出文件名的方法
批量处理BAM文件生成对应HTSeq计数输出文件
你的问题在于当前脚本把所有BAM文件的计数结果都写入了同一个固定的SC845414.txt,需要从每个BAM文件名中提取唯一样本ID,生成对应的输出文件。
文件名分析
典型BAM文件名格式为:SC845414-CTGATCGT-GCGCATAT_Aligned.sortedByCoord.out.bam,其中样本ID是第一个-分隔符之前的SC845414部分。
修改后的脚本
#!/bin/bash #SBATCH --mem=110g #SBATCH --cpus-per-task=12 #SBATCH --time=10-00:00:00 module load python # 直接遍历目标路径下的所有BAM文件,避免通配符展开问题 for bam_file in /PATH/*.bam; do # 提取文件名(去掉路径部分) filename=$(basename "$bam_file") # 提取样本ID:截取第一个'-'之前的内容 sample_id=${filename%%-*} # 动态生成输出文件路径 output_file="/PATH3/HTseq/${sample_id}.txt" # 执行HTSeq计数并写入对应输出文件 python -m HTSeq.scripts.count -s yes -f bam "$bam_file" /PATH1/gencode.v35.annotation.gtf > "$output_file" done
关键修改点
- 循环遍历优化:直接用
/PATH/*.bam遍历文件,避免使用变量存储通配符可能带来的展开问题 - 样本ID提取:用
basename获取纯文件名,再通过${filename%%-*}截取第一个横杠前的字符串作为样本ID - 动态输出路径:将样本ID拼接到输出路径中,确保每个BAM文件对应独立的输出TXT
内容的提问来源于stack exchange,提问作者Genetics
相关产品推荐
相关产品推荐

