0

我正在尝试对目录中的所有 .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 小时)。

4

1 回答 1

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.csvand not的变量basename,从而覆盖了输出文件,使其看起来好像只处理了一个 bam 文件。这应该很容易通过使用 , 调用您的 bash 变量来解决${basename},然后再使用后缀扩展它们。

于 2016-06-21T06:49:47.380 回答