我想循环遍历这些类型的文件,其中具有相同Sample_ID的文件必须一起使用
Sample_51770BL1_R1.fastq.gz
Sample_51770BL1_R2.fastq.gz
Sample_52412_R1.fastq.gz
Sample_52412_R2.fastq.gz
e.g。 Sample_51770BL1_R1.fastq.gz和Sample_51770BL1_R2.fastq.gz在一个命令中一起使用以创建输出。
同样,Sample_52412_R1.fastq.gz和Sample_52412_R2.fastq.gz一起用于创建输出。
我想在bash中编写一个for循环来迭代并创建输出。
sourcedir=/sourcepath/
destdir=/destinationpath/
bwa-0.7.5a/bwa mem -t 4 human_g1k_v37.fasta Sample_52412_R1.fastq.gz Sample_52412_R2.fastq.gz>$destdir/Sample_52412_R1_R2.sam
我应该如何模式匹配要在一个命令中使用的文件名Sample_ID_R1和Sample_ID_R2?
谢谢,
答案 0 :(得分:3)
for fname in *_R1.fastq.gz
do
base=${fname%_R1*}
bwa-0.7.5a/bwa mem -t 4 human_g1k_v37.fasta "${base}_R1.fastq.gz" "${base}_R2.fastq.gz" >"$destdir/${base}_R1_R2.sam"
done
在评论中,您要求并行运行多个但不是太多的作业。以下是我的第一次尝试:
#!/bin/bash
# Limit background jobs to no more that $maxproc at once.
maxproc=3
for fname in * # _R1.fastq.gz
do
while [ $(jobs | wc -l) -ge "$maxproc" ]
do
sleep 1
done
base=${fname%_R1*}
echo starting new job with ongoing=$(jobs | wc -l)
bwa-0.7.5a/bwa mem -t 4 human_g1k_v37.fasta "${base}_R1.fastq.gz" "${base}_R2.fastq.gz" >"$destdir/${base}_R1_R2.sam" &
done
maxproc
的最佳值取决于您的PC拥有多少处理器。您可能需要尝试找出最有效的方法。
请注意,上面的脚本使用的是jobs
,这是一个bash内置函数。因此,它必须在bash下运行,而不是破折号,这是Debian类似发行版下脚本的默认值。