Для цикла: обрабатывать файлы в разных папках UNIX - PullRequest
0 голосов
/ 15 января 2019

Я пытался найти ответ на свой вопрос, просматривая похожие темы, но безуспешно. Может быть, я упустил из виду. Любая помощь приветствуется!

Итак, у меня есть сотни папок в моем текущем каталоге с именами из папки 1000 в папку 1500. В каждой папке у меня есть один файл .fastq с другим именем (Lib1.fastq, Lib2.fastq и т. Д.). Я хочу продолжить каждый из этих файлов в одной команде цикла, запустив сценарий оболочки.

Вот мой сценарий оболочки (script.sh) для одного файла (он создает выходные данные, которые продолжаются), который я запускаю в своем терминале:

#!/bin/sh
bowtie --threads 4 -v 2 -m 10 -a genome Lib1.fastq --sam > Lib1.sam
samtools view -h -o Lib1.sam Lib1.bam
sort -k 3,3 -k 4,4n Lib1.sam > Lib1.sam.sorted
# ...etc

Вот цикл, который я пытаюсь также выполнить в сценарии оболочки (здесь я начал только с простой команды проверки «head» и только с 5 первыми папками), которую я запускаю из моего текущего каталога, где находятся все папки расположены:

#!/bin/sh

for file in ./folder{1000..1005}
do
head -10 *.fastq
done

Но в результате я получаю:

head: *.fastq: No such file or directory
head: *.fastq: No such file or directory
head: *.fastq: No such file or directory
head: *.fastq: No such file or directory
head: *.fastq: No such file or directory

Итак, даже простая команда проверки не работает для меня в цикле. Как-то не вижу файл. Но если я запускаю команду прямо в одной из папок:

MacBook-Air-Maxim:folder1000 maxim$ head -10 *.fastq

тогда я получаю правильный результат (отображаются первые 10 строк файла).

Может ли кто-нибудь предложить способ обработки всех файлов наиболее удобным способом?

Большое спасибо и очень жаль, я только учусь.

1 Ответ

0 голосов
/ 15 января 2019

Ну, вы просматриваете папки, используя переменную $file, но вы не используете эту переменную в теле цикла. Просто используйте это:

#!/bin/sh

for file in ./folder{1000..1005}
do
    head -10 $file/*.fastq
done

Есть и другие проблемы в общей проблеме, но это ответ на вопрос, который останавливает вас. Давайте решать проблемы один за другим: -)

...