0

我正在尝试在 bwa 程序(bwa sampe)中处理具有匹配前缀和不同文件类型的多个输入文件,这是一般结构:

bwa sampe /Users/xxx/Desktop/Index_align/GRCh37_latest_genomic.fna H2_S16_L001_read1.sai H2_S16_L001_read2.sai \
H2_S16_L001_R1_001.fastq.gz H2_S16_L001_R2_001.fastq.gz > aln_H2_S16_L001.sam

我在当前目录中有所有 .sai 和 fastq.gz 文件,我正在尝试制作一个循环,如:

for i in /Users/xxx/Desktop/Index_align/Fastq/fastq_run4/; do
    bwa sampe /Users/xxx/Desktop/Index_align/GRCh37_latest_genomic.fna \
    $i\-read1.sai $i\-read2.sai $i\-R1_001.fastq.gz $i\-R2_001.fastq.gz > $i\-aln.sam;
done

有人对我缺少的东西有建议吗?就像我可能需要创建一个前缀文件名列表?我将不胜感激任何建议。谢谢!

ETA:我尝试​​制作每个前缀文件的读取列表并运行:

for i in $(cat read1_list | sed s'/\-R1_001.fastq.gz//'); do 
    bwa sampe /Users/katherinenoble/Desktop/Index_align/GRCh37_latest_genomic.fna \
    $i\-read1.sai $i\-read2.sai $i\-R1_001.fastq.gz $i\-R2_001.fastq.gz | samtools view -bS - >  $i\.bam;
done

但这基本上只是制作完整文件标题前缀的文件。

4

1 回答 1

0

您可以创建一个生成所需前缀的 for 循环。如果文件范围从H0_S00_L000H2_S16_L003,您可以使用下面的循环。请注意,您必须检查每个文件是否真的存在。

for prefix in H{0..9}_S{00..16}_L{000..003}; do
    echo $prefix;
done

如果要使用一组 4 个中存在的现有文件,可以使用以下循环。它查找当前目录中的每个文件。前缀被定义为直到_fastor的所有内容_read。然后它对集合进行排序并删除双精度,如果没有找到其中的 4 个,则继续删除前缀。

while read -r prefix; do 
    echo $prefix;
done < <(find \
    | sed -r 's/(.*)_(fast|read).*/\1/' \
    | sort | uniq -c \
    | sed -r 's/[ ]*4 (.*)$/\1/; /^ /d')
于 2019-12-02T07:24:01.590 回答