У меня есть команда, которую я хочу работать на все файлы в папке, и синтаксис команды выглядит следующим образом:Bash: заменить часть файла
tophat -o <output_file> <input_file>
То, что я хотел бы сделать это скрипт который перебирает все файлы в произвольной папке и также использует имена входных файлов для создания похожих, но разных имен выходных файлов. Имена файлов выглядит следующим образом:
input name desired output name
path/to/sample1.fastq path/to/sample1.bam
path/to/sample2.fastq path/to/sample2.bam
Получение материалов для работы кажется достаточно простым:
for f in *.fastq
do
tophat -o <output_file> $f
done
Я попытался с помощью output=${f,.fastq,.bam}
и использовать это в качестве выходного параметра, но это не работает. Все, что я получаю, это ошибка: line 3: ${f,.fastq,.bam}: bad substitution
. Это способ делать то, что я хочу, или мне делать что-то еще? Если это правильный путь, что я делаю неправильно?
[EDIT]:
Спасибо за все ответы! Бонусный вопрос, хотя ... Что делать, если у меня есть файлы с именем, как это, вместо того, чтобы:
path/to/sample1_1.fastq
path/to/sample1_2.fastq
path/to/sample2_1.fastq
path/to/sample2_2.fastq
...
... где я могу иметь произвольное количество образцов (sampleX
), но все они имеют два файла, связанные с ними (_1
и _2
). Теперь команда выглядит следующим образом:
tophat -o <output_file> <input_1> <input_2>
Итак, есть еще только один выход, для которого я мог бы сделать что-то вроде "${f/_[1-2].fastq/.bam}"
, но я не уверен, как получить петлю, что только итерацию один раз за каждый sampleX
в то же время, что и связанные файлы ... Идеи?
[EDIT 2 #]:
Итак, это последний сценарий, который сделал трюк!
for f in *_1.fastq
do
tophat -o "${f/_1.fastq/.bam}" $f "${f/_1.fastq/_2.fasq}"
done
Большое спасибо, что сделали! Всегда есть что-то маленькое ... Есть ли у вас какие-либо идеи о том, как решить проблему в моем редактировании? – Sajber
Вы можете использовать '' $ {f/_ [0-9] .fastq/.bam} "для отредактированной части. – anubhava
Вы также можете использовать '' $ {f/[0-9] _ [0-9] .fastq/.bam} ", если вы хотите, чтобы в качестве конечного вывода был' path/to/sample.bam'. – anubhava