sed コマンドに関して、次の問題があります。私がしたいことは:
sed '1 d' filename.fa | sed "1i\>filename\n" > filename_Edited.fa
ファイルの最初の行は「>ファイル名」に置き換えられます。これは2段階で行われる。最初の行を削除し、目的の ">テキスト"を含む新しい行を挿入します。変数なしでコンソールに直接コマンドを入力すると、コマンドは上記で作成したのと同じように機能します。ただし、このコマンドを次のスクリプトに統合する必要があります。ここでファイル名は変数に依存します。
#!/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と呼ばれ、DNA配列のプレーンテキスト形式です。
答え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