sed в устранении неполадок сценариев bash

У меня возникла следующая проблема, связанная с командой sed. Я хочу сделать следующее:

sed '1 d' filename.fa | sed "1i\>filename\n" > filename_Edited.fa

, где первая строка файла заменяется на «> имя_файла». Это делается в два этапа: удаление первой строки и затем вставка новой, содержащей желаемый «> текст». Команда работает так, как указано выше, если это вводится непосредственно в консоль (без переменных). Однако мне нужно, чтобы эта команда была интегрирована в следующий сценарий, где имя файла теперь зависит от переменной:

#!/bin/bash

CODE=`cut -c 7-21 Data.txt`

cd ../FASTA_SEC/
 for i in ${CODE}
 do
 sed '1 d' ${CODE}.fa | sed "1i\>${CODE}\n" > ${CODE}_Edited.fa
 done

Я получаю следующую ошибку, когда этот сценарий запускается для каждой итерации цикла for :

try: line 8: ${CODE}_Edited.fa: ambiguous redirect

Я не понимаю, что не так в sed sintaxis или в общем скрипте. Похоже, он должен работать, но не работает. Есть подсказка?

Я также пытался запустить скрипт без запрограммированной части, выполняя только команду sed, которая удаляет первая строка текста:

#!/bin/bash

CODE=`cut -c 7-21 Data.txt`

cd ../FASTA_SEC/
 for i in ${CODE}
 do
 sed '1 d' ${CODE}.fa > ${CODE}_Edited.fa
 done

Однако он снова возвращает прежнюю ошибку!

Спасибо за вашу помощь !!

**. Формат fa известен как fasta which ar Это своего рода простой текстовый формат, используемый в последовательностях ДНК

0
29.11.2016, 17:48
1 ответ

Может быть проще не использовать sed для препенда, а cat:

#!/bin/bash
header=$(mktemp)
scratch=$(mktemp)
trap "rm -f $header $scratch" EXIT

cd ../FASTA_SEC/
for CODE in $(cut -c 7-21 Data.txt); do
    echo ">${CODE}_" > $header
    if [[ -r "${CODE}.fa" ]]; then
        sed '1d' "${CODE}.fa" > $scratch
        cat $header $scratch > ${CODE}_Edited.fa
    fi
done
2
28.01.2020, 02:34

Теги

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