bash скрипт - l oop через файлы и добавление к различным переменным - PullRequest
0 голосов
/ 16 января 2020

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

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, используя для l oop, но у меня ничего не получилось. Кроме того, я не знаю, как последовательно переименовать вывод.

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

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 Ответ

3 голосов
/ 16 января 2020

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

Для этого l oop поверх только файлов 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 вместо?

...