bash は、特定の文字を変更した後、文字列の中間部分を繰り返します。

bash は、特定の文字を変更した後、文字列の中間部分を繰り返します。

各ファイルの間にヘッダーを含む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と互換性があるため、ファイル名にスペースや特殊文字が含まれている場合は、変数拡張を引用しないでください。

おすすめ記事