写一段嵌套2层的for循环,将/public/work/Project/Assembly/SA2022010902_lanhua/pan_sv/data/路径下的所有fasta文件两两一组进行遍历执行上段shell代码
时间: 2023-06-30 11:20:02 浏览: 104
JavaScript中利用for循环遍历数组
以下是一段嵌套2层的for循环,用于遍历/public/work/Project/Assembly/SA2022010902_lanhua/pan_sv/data/路径下的所有fasta文件。其中,对于每两个fasta文件,都会执行上段的Shell代码。
```bash
#!/bin/bash
data_dir='/public/work/Project/Assembly/SA2022010902_lanhua/pan_sv/data/'
# 遍历data_dir目录中的所有fasta文件
for file1 in ${data_dir}/*.fasta; do
for file2 in ${data_dir}/*.fasta; do
# 确保file1和file2不是同一个文件
if [ "$file1" != "$file2" ]; then
# 执行上段的Shell代码
touch snp_indel.end.sh && cat snp_indel.end.sh && \
export PATH=/public/work/Personal/pangshuai/software/conda/miniconda3/bin/:${PATH} && \
nucmer --mum -t 8 -g 1000 -p ${file1##*/}.${file2##*/}.ref_based.nucmer $file1 $file2 && \
delta-filter -1 -l 200 ${file1##*/}.${file2##*/}.ref_based.nucmer.delta > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter && \
dnadiff -d ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter -p ${file1##*/}.${file2##*/}.ref_based.nucmer && \
show-coords -rcloT ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.coords && \
show-coords -THrd ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.syri.coords && \
show-snps -ClrTH ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp && \
show-diff ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.inv && \
perl /public/work/Pipline/Structural_Variation/pipeline/2.1.1/bin/filter_the_MUmmer_SNP_file.pl ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.SNPs ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Insertions ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Deletions 10000000 && \
touch snp_indel.end.tmp && \
mv snp_indel.end.tmp snp_indel.end && \
sleep 10
fi
done
done
```
这段代码使用了两个嵌套的for循环,对于每两个不同的fasta文件,都会执行上段的Shell代码。其中,使用了${file1##*/}和${file2##*/}来获取file1和file2的文件名,方便在输出文件名中使用。另外,使用了if语句来确保file1和file2不是同一个文件。最后,使用了touch和mv命令来创建和重命名文件,以便下一次循环使用。
阅读全文