Bash 如何通过';对于';命令
我有多个样本,R1和R2读取为fastq.gz格式(这些文件相互补充)。我想在所有文件上运行BWA mem paired end parallel,一旦完成,每个R1和R2补充文件应生成一个sam文件。现在我正在根据两次读取制作两个sam文件 这是我想出来的,但它没有做我需要它做的事情Bash 如何通过';对于';命令,bash,Bash,我有多个样本,R1和R2读取为fastq.gz格式(这些文件相互补充)。我想在所有文件上运行BWA mem paired end parallel,一旦完成,每个R1和R2补充文件应生成一个sam文件。现在我正在根据两次读取制作两个sam文件 这是我想出来的,但它没有做我需要它做的事情 for i in `find -maxdepth 2 -iname *fastq.gz -type f`; do echo "bwa mem -t 12 /H.Sapiens/ucsc.hg19.fasta
for i in `find -maxdepth 2 -iname *fastq.gz -type f`; do
echo "bwa mem -t 12 /H.Sapiens/ucsc.hg19.fasta ${i}_R1_001.fastq.gz ${i}_R2_001.fastq.gz > ${i}_R1_R2.sam"
done
当它运行时,它看起来像这样
bwa mem -t 12 /H.Sapiens/ucsc.hg19.fasta ./Sample_0747/0747_CGG_L001_R2_001.fastq.gz_R1_001.fastq.gz ./Sample_0747/0747_CGG_L001_R2_001.fastq.gz_R2_001.fastq.gz > ./Sample_0747/0747_CGG_L001_R2_001.fastq.gz_R1_R2.sam
bwa mem -t 12 H.Sapiens/ucsc.hg19.fasta ./Sample_0748/0748_CCA_L001_R1_001.fastq.gz_R1_001.fastq.gz ./Sample_0748/0748_CCA_L001_R1_001.fastq.gz_R2_001.fastq.gz > ./Sample_0748/0748_CCA_L001_R1_001.fastq.gz_R1_R2.sam
-bash-4.1$
我知道问题出在我身上,但我该如何解决?
非常感谢试试看
find -maxdepth 2 -iname \*fastq.gz -type f |
sed 's/_R[12]_001\.fastq\.gz$//' |
sort -u |
while IFS= read -r f; do
echo "bwa mem -t 12 /H.Sapiens/ucsc.hg19.fasta \"${f}_R1_001.fastq.gz\" \"${f}_R2_001.fastq.gz\" > \"${f}_R1_R2.sam\""
done
*。首先,出于理智的考虑,将代码放入脚本中,如
cat > script < SCRIPT
for i; do
bwa mem -t 12 /H.Sapiens/ucsc.hg19.fasta "${i}_R"{1,2}_001.fastq.gz > "${i}_R1_R2.sam"
done
SCRIPT
chmod +x script
或
*它表示“解析ls
”,但它适用于解析任何用于人类消费的命令<代码>查找被明确调用
另一方面,如果在
find
的参数周围不加引号,shell可能会将它们解释为globs
find -iname *fastq.gz
可以扩展到
find -iname foofastq.gz barfastq.gz bazfastq.gz
你想要
find -iname '*fastq.gz'
如你所见,有两个不同的答案。因此,您可以添加
想要的输出
示例…;)
find -iname foofastq.gz barfastq.gz bazfastq.gz
find -iname '*fastq.gz'