Bash脚本在1个文件后停止

时间:2016-06-19 23:06:21

标签: bash bioinformatics

我正在尝试在目录中的所有.bam文件上运行生物信息学命令行工具。这就是我正在使用的:

#!/bin/sh

reference='/path/Homo_sapiens_assembly19.fasta'

for f in *.bam
do 
    base_name=${f%.bam}
    java -jar /ppath/GenomeAnalysisTK.jar -R $reference \
   -T ASEReadCounter \
   -o $base_name.csv \
   -I $f \
   -sites $base_name.vcf \
   -U ALLOW_N_CIGAR_READS \
   -minDepth 10 \
   --minMappingQuality 10 \
   --minBaseQuality 2
done;

问题是循环在迭代第一个bam文件后停止。我最终会喜欢这个浏览一组2000个.bam文件,而且我不想手动输入它们(它需要大约30个小时)。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

#!/bin/bash

reference='/path/Homo_sapiens_assembly19.fasta'

for f in $(ls ./*.bam); do
    base_name=${f%.bam} 
    #base_name=$(basename ${f})  # alternatively you can use this
    java -jar /ppath/GenomeAnalysisTK.jar -R ${reference} \
   -T ASEReadCounter \
   -o ${base_name}.csv \
   -I ${f} \
   -sites ${base_name}.vcf \
   -U ALLOW_N_CIGAR_READS \
   -minDepth 10 \
   --minMappingQuality 10 \
   --minBaseQuality 2
done;

我怀疑你的-o $base_name.csv正在寻找一个名为basename.csv而不是basename的变量,因此会覆盖输出文件,使其看起来好像只处理了一个bam文件。通过使用${basename}调用bash变量,在使用后缀扩展它们之前,可以很容易地解决这个问题。