Я хотел бы запустить команду для списка парных файлов в следующем формате
SAMPLE_1.1.fq.gz SAMPLE_1.2.fq.gz
SAMPLE_2.1.fq.gz SAMPLE_2.2.fq.gz
и т. Д.
и т. Д. Это в каталоге с именем ../cleaned-trimmed
У меня есть список сэмплов в текстовом файле (samples_final.txt - один сэмпл на строку) в каталоге с именем info.
SAMPLE_1
SAMPLE_2
SAMPLE_3
Я хотел бы выполнить следующую команду для всех примеров:
gsnap <args> --output-file=./alignments.gsnap/SAMPLE_1.mapped.sam --failed-input=./alignments.gsnap/SAMPLE_1.unmapped.fa ../cleaned-trimmed/SAMPLE_1.1.fq.gz ../cleaned-trimmed/SAMPLE_1.2.fq.gz
Где аргументы - это используемая база данных, флаги команд и т. Д.
Я изменил скрипт изпредыдущий ответ в stackoverflow, чтобы построить цикл следующим образом:
for file in $(<../info/samples_final.txt)
do
gsnap <args> --output-file=./alignments.gsnap/${file}.mapped.sam --failed-input=./alignments.gsnap/${file}.unmapped.fa ../cleaned-trimmed/${file}.1.fq.gz ../cleaned-trimmed/${file}.2.fq.gz
done
, но он не передает переменные правильно.
Как передать значения из samples_final.txt в команду? На данный момент сценарий искажает имена файлов, когда я запускаю цикл. Так, например, если я запускаю тест для файла "for_test2.txt":
SAMPLE_1
SAMPLE_2
Используя команду echo:
for file in $(<../info/for_test2.txt)
do
echo ../cleaned-trimmed/${file}.1.fq.gz
done
, я получаю следующий вывод:
.1.fq.gzed-trimmed/SAMPLE_1
.1.fq.gzed-trimmed/SAMPLE_2
.1.fq.gzed-trimmed/
Так что, похоже, он заменил ../clean на .1.fq.gz
Я искренне не понимаю логику этого.