У меня возникла следующая проблема, связанная с командой 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 Это своего рода простой текстовый формат, используемый в последовательностях ДНК
Может быть проще не использовать 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