bash script - перебирать файлы и добавлять к различным переменным

У меня есть файлы с такими именами, как:

0195_R1.fastq
0195_R2.fastq
0196_R1.fastq
0196_R2.fastq
0197_R1.fastq
0197_R2.fastq

и так далее.

Мне нужно запустить программное обеспечение для каждой пары файлов (R1 и R2 соответствуют друг другу), например:

bowtie2 -x index_files -1 0195_R1.fastq -2 0195_R2.fastq -S 0195_output.sam

С несколькими парами мне пришлось бы бегать несколько раз. Поэтому я попытался сделать bash-скрипт, используя цикл for, но у меня ничего не получилось. Кроме того, я не знаю, как последовательно переименовать вывод.

Я пробовал следующее:

for R1 in $FQDIR/*_R1.fastq; do
for R2 in $FQDIR/*_R2.fastq; do

    bowtie2 -x index_files -1 $R1 -2 $R2 -S $N_output.sam

done
done

Что я должен делать?

Всего 1 ответ


Если вы переберите все файлы R1 и R2, вы запустите bowtie для всех возможных пар файлов данных. Если я правильно понимаю, это не то, что вы хотите - вы хотите обрабатывать только соответствующие пары.

Для этого зациклите только файлы R1 и попробуйте найти соответствующий файл R2 для каждого:

#!/bin/bash
fqdir=...
for r1 in "$fqdir"/*_R1.fastq; do
    r2=${r1%_R1.fastq}_R2.fastq
    if [[ -f $r2 ]] ; then
        bowtie2 -x index_files -1 "$r1" -2 "$r2" -S "$N"_output.sam
    else
        echo "$r2 not found" >&2
    fi
done

Я не уверен, что означает $N Может быть, вы можете использовать вместо $r1 ?


Есть идеи?

10000