Получение имени родительского скрипта из дочернего скрипта

Основная проблема заключается в том, что вы запускаете sedбез каких-либо входных данных, что означает, что он будет считывать свой стандартный входной поток, унаследованный от охватывающего цикла, который содержит имена файлов, которые вы передаете изls(все в первой итерации цикла ). Дополнительная проблема заключается в том, что вы используете lsдля вывода списка ваших файлов (проще и безопаснее просто перебирать имена файлов, чем правильно читать выводls). Кроме того, код немного сложно читать, учитывая несколько запутанное регулярное выражение, которое вы используете.


Для циклического просмотра файлов используйте

for pathname in mgp*/mgm*.3/*.fna; do
   #... use "$pathname" here...
done

Чтобы получить трехзначный код генома из имени подкаталога, учитывая путь к файлу fasta в$pathname:

genome=${pathname%.3/*.fna}     # trim off tail
genome=${genome#mgp*/mgm????}   # trim off head

Это даст вам, например. 322в $genomeиз mgp83581/mgm4729322.3/blah.fnaв $pathname.

Таким же образом, чтобы получить номер проекта:

project=${pathname%/mgm*.3/*.fna}   # trim off tail
project=${project#mgp}              # trim off head

Теперь $projectбудет 83581, а $genomeбудет 322.

Чтобы вставить их после каждого >в начале строки в каждом файле fasta:

for pathname in mgp*/mgm*.3/*.fna; do
    genome=${pathname%.3/*.fna}     # trim off tail
    genome=${genome#mgp*/mgm????}   # trim off head

    project=${pathname%/mgm*.3/*.fna}   # trim off tail
    project=${project#mgp}              # trim off head

    sed -i.old "s/^>/>${project}_${genome}_/" "$pathname"
done

Это дополнительно создаст резервную копию старых файлов с суффиксом .old.

Примечание. :Проверьте это на копии ваших собственных данных. У меня нет доступных файлов fasta, и я не тестировал финальный цикл.

0
18.11.2020, 02:53
1 ответ

Решил сам. Все, что мне нужно было сделать, это поставить

#!/bin/bash

в качестве первой строки скрипта.

(Чем старше я становился, тем лучше я был ).

0
18.03.2021, 22:48

Теги

Похожие вопросы