Как заменить расширение в регулярных выражениях Bash? - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь написать bash-скрипт для подсчета биологических вещей.У меня есть проблема с регулярным выражением, bash мне пока немного незнаком.К сожалению, у меня нет времени, чтобы научиться этому так быстро, потому что мне нужны имманентные результаты.Итак, мои файлы:

RV30.afa
resFilesRV30.fasta
RV30213.afa
resFilesRV30213.fasta
RV30441.afa
resFilesRV30441.fasta
...

Команда, которую я должен использовать:

mscore -cftit RV30.afa resFilesRV30.fasta >FinalRV30.txt'

Что у меня сейчас:

#!/bin/bash
parallel 'mscore -cftit {} resFile{}.fasta >final{.}.txt' ::: RV*.afa

Проблема в том, что resFile {}.fasta = пытается открыть файл следующим образом: resFileXXX. afa .fasta Мне нужно пропустить расширение во втором аргументе (.afa) и переписать его с помощью ".fasta".

Я не сделалЯ не нашел в Google полезного совета по моей проблеме (или пока не могу перефразировать его в своем сценарии), и мое время для получения результатов уже заканчивается.Поэтому я буду благодарен за помощь в решении этой проблемы.На его основе я смогу решить некоторые другие, которые появились в моих других сценариях

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Это должно работать для вас, заменив {} на {.} во втором аргументе:

parallel 'mscore -cftit {} resFiles{.}.fasta >final{.}.txt' ::: RV*.afa

Поскольку вы уже используете в своей команде, строка замены {.} удаляет расширение.

0 голосов
/ 17 февраля 2019

Это не работает?

for afafile in *.afa; do number="${afafile#file}"; number="${number%.afa}"; ./mscore -cftit "$afafile" "resFile${number}.fasta" > "file${number}final.txt"; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...