我想使用 Hisat2 对单端的数千个样本进行校准,每个样本分布在不同的库中。
我修改了此脚本(https://www.biostars.org/p/223404/#224169):
> 0
它给我回声为:
#!/bin/bash
for f in `ls data/1547_2015/Accessions/Alst-1_6989/transcriptome/fastq/trim/*.fastq.bz2_trimmed.fq.gz | sed 's/.fastq.bz2_trimmed.fq.gz//g' | sort -u`
do
echo HISAT/hisat2-2.1.0/hisat2 --p 8 --min-intronlen 60 --max-intronlen 6000 --dta -x Hisat2_index/arabidopsis -U ${f}.fastq.bz2_trimmed.fq.gz -S ${f}.bam
done
因为这是相同的样本( Alst-1_6989 ),所以分配在不同的通道( SRR3460433,SRR3460434,SRR3460435,SRR3460436 )之间,应使用逗号而不是逗号下面是一个单独的命令,我想要输出文件( 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 -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
我认为一些为循环设置的方法可以工作,或者类似这样的方法,我们将不胜感激。
答案 0 :(得分:1)
全路径文件名不应该是重复的,所以我放弃了sort
。
我将假设每个样本的文件数量合理。
为此-
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
我没有像这样的结构,所以没有像我想的那样测试过。尽管如此,但它所做的只是打印命令,您可以在执行之前保存并检查这些命令。
让我知道发生了什么问题,我们将对其进行修复。