Bashスクリプトでsedのトラブルシューティング

Bashスクリプトでsedのトラブルシューティング

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

おすすめ記事