各ファイルの間にヘッダーを含む120個のファイル(genomes.faa)があります。
>GENOME1_00001 HYPOTHETICAL PROTEIN A
NQFTIAQSQVGLEDALLDL
>GENOME1_00002 HYPOTHETICAL PROTEIN B
NQFTIAQSQVGLEDALLDL
>GENOME1_00003 HYPOTHETICAL PROTEIN C
NQFTIAQSQVGLEDALLDL
etc.
名前の後ろの「_0000X」を削除して「|」に変更しようとしました。
>GENOME1|HYPOTHETICAL PROTEIN A
NQFTIAQSQVGLEDALLDL
>GENOME1|HYPOTHETICAL PROTEIN B
NQFTIAQSQVGLEDALLDL
>GENOME1|HYPOTHETICAL PROTEIN C
NQFTIAQSQVGLEDALLDL
etc.
私はこれを試みます:
for file in *.faa
do
sed -r 's/_.*$/|/g' $file > $file.1
done
これは後で「仮説的なプロテインA」を維持しないので、以下の結果が生じる。
>ERR1156171|
MMRQSVQTVLP
変える
>ERR1156171|HYPOTHETICAL PROTEIN A
MMRQSVQTVLP
助けてくれてありがとう!
ベストアンサー1
私の考えでは、職業監督にかなり近づいていると思います。これはあなたが提供したいくつかの例を通して私に効果的でした。
sed -E 's/_[0-9]+ /|/' "$file" > "$file.1"
- アンダースコア、数字、および空白文字にのみ一致を制限する
_.*
ために一致式を変更しました。_[0-9]+
$
最初の単語の終わりではなく行の終わりと一致するため、これを削除しました。- あなたの例には、複数の場所ではなく編集する必要がある各行の位置が1つしかない
/g
ため、置換コマンドの最後をからに変更しました。/
-E
また、拡張-r
正規表現は他のバージョンのsedと互換性があるため、ファイル名にスペースや特殊文字が含まれている場合は、変数拡張を引用しないでください。