For loop 使用循环组合命令

For loop 使用循环组合命令,for-loop,nested-loops,For Loop,Nested Loops,我想使用Hisat2对单端数千个样本以及分布在不同库中的每个样本执行对齐 我已经修改了这个脚本(): 它给我的印象是: HISAT/hisat2-2.1.0/hisat2 --p 8 --min-intronlen 60 --max-intronlen 6000 --dta -x Hisat2_index/arabidopsis -U data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460433.fastq.b

我想使用Hisat2对单端数千个样本以及分布在不同库中的每个样本执行对齐

我已经修改了这个脚本():

它给我的印象是:

HISAT/hisat2-2.1.0/hisat2 --p 8 --min-intronlen 60 --max-intronlen 6000 --dta -x Hisat2_index/arabidopsis -U data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460433.fastq.bz2_trimmed.fq.gz -S data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460433.bam
HISAT/hisat2-2.1.0/hisat2 --p 8 --min-intronlen 60 --max-intronlen 6000 --dta -x Hisat2_index/arabidopsis -U data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460434.fastq.bz2_trimmed.fq.gz -S data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460434.bam
HISAT/hisat2-2.1.0/hisat2 --p 8 --min-intronlen 60 --max-intronlen 6000 --dta -x Hisat2_index/arabidopsis -U data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460435.fastq.bz2_trimmed.fq.gz -S data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460435.bam
HISAT/hisat2-2.1.0/hisat2 --p 8 --min-intronlen 60 --max-intronlen 6000 --dta -x Hisat2_index/arabidopsis -U data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460436.fastq.bz2_trimmed.fq.gz -S data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460436.bam
由于这是同一个样本(Alst-1_6989)分布在不同的车道(SRR346433、SRR346434、SRR346435、SRR346435、SRR346436)之间,应使用逗号连接,而不是作为一个单独的命令,如下所示,并且我希望在输出文件(Alst-1_6989.bam)中包含样本的名称(Alst-1_6989),目前它是分布式库的名称。这只是一个例子,我有数千个样本,其中包含数量可变的分布式库,,所以我们需要记住这一点

HISAT/hisat2-2.1.0/hisat2 --p 8 --min-intronlen 60 --max-intronlen 6000 --dta -x Hisat2_index/arabidopsis -U data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460433.fastq.bz2_trimmed.fq.gz,data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460434.fastq.bz2_trimmed.fq.gz,data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460435.fastq.bz2_trimmed.fq.gz,data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/SRR3460436.fastq.bz2_trimmed.fq.gz -S data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/Alst-1_6989.bam
我认为一些Nested for loop可以工作,或者类似的东西,任何帮助都将非常感谢。

完整路径文件名不应重复,因此我放弃了
排序

我将假设每个样本有合理数量的文件。
为此-

base="$PWD"
cmdtrunk="HISAT/hisat2-2.1.0/hisat2 --p 8 --min-intronlen 60 --max-intronlen 6000 --dta -x Hisat2_index/arabidopsis -U "
shopt -s nullglob                         # return empty if not matched
for sample in data/1547_2015/Accessions/* # assumes no spaces, etc
do [[ -d "$base/$sample" ]] || continue   # ignore files in this dir
   lst=( $( find "$base/$sample/transcriptome/fastq/trim/" -name \*.fastq.bz2_trimmed.fq.gz -print0 |
       while read -r -d '' f; do printf "%s\n" "$f"; done ) ) 
   if (( ${#lst[@]} ))
   then stack="$( printf "%s," "${lst[@]}" )"
        printf " %s\n" "$cmdtrunk ${stack%,} -S $base/$sample/${sample##*/}.bam"
   fi
done
我没有类似的结构,所以没有像我希望的那样测试过。尽管如此,但它所做的只是打印命令,您可以在执行之前保存和检查这些命令


让我知道什么坏了,我们会修复它。

非常感谢,上面的命令组合了如下库:cmdtrunk/media/waqas/segate Backup Plus Drive/Analysis/data/1547_2015/Accessions/Alst-1_6989/transcript-ome/fastq/trim/srr346433.fastq.bz2_trim.fq.gz,/media/waqas/segate Backup Plus Drive/Analysis/data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/srr346434.fastq.bz2_trim.fq.gz,但它没有启动命令:HISAT/hisat2-2.1.0/hisat2-p8-min introllen 60-max introllen 6000-dta-x hisat2_index/arabidopsis-U有可能排序吗?让这个命令可执行有两件主要的事情-1)我没有在我的var上加上
$
(这是一种过失),2)你的结构中有嵌入的空格。我为此做了编辑。作为一项规则,我像瘟疫一样避免在文件名中使用空格,但我完全理解人们并不总是可以选择。告诉我这次发生了什么事。:)(stackoverflow.com/users/8656552/paul hodges),是否可以从最后加入的fastq文件末尾删除逗号。意思是我希望像这样连接文件(srr346433.fastq.bz2_trimmed.fq.gz,srr346434.fastq.bz2_trimmed.fq.gz,srr346435.fastq.bz2_trimmed.fq.gz),而不是像这样(srr346433.fastq.bz2_trimmed.fq.gz,srr34646434.fastq.bz2_trimmed.fq.gz,srr3435.fastq.bz2_trimmed.fq.gz,fq.gz,)
base="$PWD"
cmdtrunk="HISAT/hisat2-2.1.0/hisat2 --p 8 --min-intronlen 60 --max-intronlen 6000 --dta -x Hisat2_index/arabidopsis -U "
shopt -s nullglob                         # return empty if not matched
for sample in data/1547_2015/Accessions/* # assumes no spaces, etc
do [[ -d "$base/$sample" ]] || continue   # ignore files in this dir
   lst=( $( find "$base/$sample/transcriptome/fastq/trim/" -name \*.fastq.bz2_trimmed.fq.gz -print0 |
       while read -r -d '' f; do printf "%s\n" "$f"; done ) ) 
   if (( ${#lst[@]} ))
   then stack="$( printf "%s," "${lst[@]}" )"
        printf " %s\n" "$cmdtrunk ${stack%,} -S $base/$sample/${sample##*/}.bam"
   fi
done