次の文字列を含むファイルがたくさんあります。
>33100_Pseudomonas_etcetera1
texttexttext
>33632_Pseudomonas_etcetera2
texttexttext
>36406_Pseudomonas_etcetera3
texttexttext
次の出力が必要です。
>Pseudomomas_etcetera1
texttexttext
>Pseudomomas_etcetera2
texttexttext
>Pseudomomas_etcetera3
texttexttext
単純なsedソリューションがあると確信していますが、理解できないようです。
注:文字は常に5桁の数字で、その後に下線、疑似モナスなどが続きます。文字列は常にその行の先頭にあり、常に「>」で始まります。すべてのファイルには「.sorted」拡張子があります。
答え1
sed
できる:
sed -E 's/>([0-9]+_)(\w+)/>\2/' files
パターンにまったく問題がある場合:
sed -E 's/([0-9]+_)//' files
-E
拡張正規表現の使用([0-9]+_)(\w+)
2つの定義フォントあなたがそれらを訪問する地域\1そして\2。
答え2
Standardを使用しsed
、すべてのファイルが現在ディレクトリにあるとします。
mkdir fixed || exit 1 # exits if the output directory already exists
for filename in *.sorted; do
sed '/^>[0-9]*_/s//>/' "$filename" >"fixed/$filename"
done
その後、パターンに一致するすべてのファイル名を繰り返し、*.sorted
各ファイル名に対して短いsed
スクリプトを実行します。
スクリプトsed
は、数字と下線で始まるすべてのFastaヘッダーを探します。 1つを見つけたら、タイトルタグ、数字、および下線をタイトルタグに置き換えます>
。
fixed
結果はサブディレクトリの新しいファイルに書き込まれます。
答え3
[OPが書いた]単純なsedソリューションがあることは確かですが、理解できないようです。
いいですね。
[OPが書いた]注:文字は常に5桁の数字で、その後にアンダースコア、Pseudomonas_etceteraが続きます。文字列は常にその行の先頭にあり、常に「>」で始まります。すべてのファイルには「.sorted」拡張子があります。
pbmステートメントの説明はコードに効率的に変換できるため、非常に正確ですsed
。それだけです:
- 文字列は常に行の先頭にあり、常に ">"で始まります。regex =>
/^>/
- 文字は常に5つの数字です:regex =>
/^>[0-9][0-9][0-9][0-9][0-9]/
- その後にアンダースコアが続き、その後に「Pseudomonas_etcetera」が続きます。regex =>
/^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/
- の置換コマンドの基本構文は
sed
次のとおりです。これは、正規表現(コマンドの前)s/regex/rpl_str/
と一致するパターン空間(通常は現在の行、レコードとも呼ばれる)のすべての部分がコマンドの。LHS
s///
RHS
s///
- したがって、交換を実行するコマンドは次のようになります。
sed -e 's/^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/>Pseudomonas_etcetera/' inp1.sorted
- 免責事項:テストされていません。