一般化する

一般化する

いくつかの行を含むテキストファイルがあり、その一部は ">"で始まります(これはいわゆる* .fastaファイルであり、 ">"は新しい情報コンテナの開始を示します)。

>header_name1
sequence_info
>header_name2
sequence_info

この行があるファイルの名前をヘッダーに追加したいと思います。たとえば、ファイル名が「1_nc.fasta」の場合、ファイル内で>で始まるすべての行に「001」というラベルを付ける必要があります。

>001-header_name1
sequence_info
>001-header_name2
sequence_info

フレンドリーな魂が私に次のようなセリフを与えました。

sed 's/^>/>001-/g' 1_nc.fasta>001_tagged.fasta 

したがって、2_nc.fastaのすべてのヘッダーは "002-"、3_nc.fasta -> "003-"などで始まる必要があります。

並列タスクをスクリプト化する方法を知っていますが、タスクがすぐに完了し、すべてのファイルをループで順次処理するスクリプトがはるかに良いと思います。残念ながら、私だけではこれを行うことはできません。

追加されたねじれ:11_nc.fastaと149_nc.fastaは使用できません。

ディレクトリ内の500個のファイル全体をどのように繰り返しますか?

ベストアンサー1

これはトリックを行う必要があります。ファイル名をアンダースコアで区切って数値プレフィックスを取得し、a を使用してprintf3 桁の文字列にゼロパディングします。

for file in *.fasta; do
    prefix="$(printf "%03d" "${file%%_*}")"
    sed  "s/^>/>$prefix-/" "$file" > "${prefix}_tagged.fasta"
done 

おすすめ記事