次のクラスター fasta ファイル (ファイルと呼ばれる) があります。
>1AB2
>1AB2 AA
NWWIEUNJRNIBGOWNGIOWGRBIGBRGRIOWGI
NCIDHFR8EHGBVPIWOBGIGRI
>1AB3 AA
WNIOREHUEBRGOUERGHBERGIORBGREUGEGO
NWFWRUBGREOUEREOBRIOBNERIOBN
>1SC4 AA
WNIOREHUEBRGOUERGHBERGIORBGREUGEGO
NWFWRUBGREOUEREOBRIOBNERIOBN
>2CD5 AA
WNIOREHUEBRGOUERGHBERGIORBGREUGEGO
NWFWRUBGREOUEREOBRIOBNERIOBN
>2AC6
>2AC6 AA
NFIGEURHGEIROHEGHTUTJGENLJBBEOWRIU
NFIROUHBOERVERUGBERUOVREOIBROEBVUE
NVHIRE
>2ONM AA
BUCIEHBUORBREOBWQVURVELLAJFLHIEBGR
NHEIBVEURIGBVNRIHEOEAJVSJDNHVUGBVR
NEBIBVVBRU
>2POD AA
BUFEWIBOEUWBWOREBRIUBGUERIGBVOSRIP
BUEIBVEO
>7KZL
>7KZL AA
BUIREBVAUREVBREOIRGPNJBFDVERUBVROR
>6HG3
>6GH3 AA
NBVUIREVOIAWRHRUGRTYUVDNJKDFHUGSEI
FHUIERBLUUIREB
>6GH4 AA
BDFUIGEVUERERHOBERIHBSDLKFJBNIERIH
NFHILRUGAURHG
情報ファイルには4つのグループがあります。1AB2, 2AC6, 7KZL, and 6GH3
最初>1AB2
と最初の期間の内容は>2AC6
このクラスタに属します1AB2
。最初>2AC6
と最初の期間の内容は>7KZL
このクラスタに属します2AC6
。
2番目のファイルを4つのファイルに分割したいと思います>XXXX
。各ファイルは次のようにする必要があります。
ファイル1
>1AB2 AA
NWWIEUNJRNIBGOWNGIOWGRBIGBRGRIOWGI
NCIDHFR8EHGBVPIWOBGIGRI
>1AB3 AA
WNIOREHUEBRGOUERGHBERGIORBGREUGEGO
NWFWRUBGREOUEREOBRIOBNERIOBN
>1SC4 AA
WNIOREHUEBRGOUERGHBERGIORBGREUGEGO
NWFWRUBGREOUEREOBRIOBNERIOBN
>2CD5 AA
WNIOREHUEBRGOUERGHBERGIORBGREUGEGO
NWFWRUBGREOUEREOBRIOBNERIOBN
ファイル_2
>2AC6 AA
NFIGEURHGEIROHEGHTUTJGENLJBBEOWRIU
NFIROUHBOERVERUGBERUOVREOIBROEBVUE
NVHIRE
>2ONM AA
BUCIEHBUORBREOBWQVURVELLAJFLHIEBGR
NHEIBVEURIGBVNRIHEOEAJVSJDNHVUGBVR
NEBIBVVBRU
>2POD AA
BUFEWIBOEUWBWOREBRIUBGUERIGBVOSRIP
BUEIBVEO
ファイル_3
>7KZL AA
BUIREBVAUREVBREOIRGPNJBFDVERUBVROR
ファイル_4
>6GH3 AA
NBVUIREVOIAWRHRUGRTYUVDNJKDFHUGSEI
FHUIERBLUUIREB
>6GH4 AA
BDFUIGEVUERERHOBERIHBSDLKFJBNIERIH
NFHILRUGAURHG
答え1
awk '/^>/ && NF==1 {close(out); out="file_"++n; next} {print > out}' file
>
テスト入力に基づいて、出力ファイルのヘッダ定義を1つのフィールドと1つのフィールドで始まる行に変更したいと思います。この行を使用すると、next
何も印刷されませんが、出力ファイル名を設定します。また、close()
この呼び出しは、エラーが発生する可能性があるあまりにも多くのファイルが開いていないことを確認しますawk
。
出力:
$ head file_*
==> file_1 <==
>1AB2 AA
NWWIEUNJRNIBGOWNGIOWGRBIGBRGRIOWGI
NCIDHFR8EHGBVPIWOBGIGRI
>1AB3 AA
WNIOREHUEBRGOUERGHBERGIORBGREUGEGO
NWFWRUBGREOUEREOBRIOBNERIOBN
>1SC4 AA
WNIOREHUEBRGOUERGHBERGIORBGREUGEGO
NWFWRUBGREOUEREOBRIOBNERIOBN
>2CD5 AA
==> file_2 <==
>2AC6 AA
NFIGEURHGEIROHEGHTUTJGENLJBBEOWRIU
NFIROUHBOERVERUGBERUOVREOIBROEBVUE
NVHIRE
>2ONM AA
BUCIEHBUORBREOBWQVURVELLAJFLHIEBGR
NHEIBVEURIGBVNRIHEOEAJVSJDNHVUGBVR
NEBIBVVBRU
>2POD AA
BUFEWIBOEUWBWOREBRIUBGUERIGBVOSRIP
==> file_3 <==
>7KZL AA
BUIREBVAUREVBREOIRGPNJBFDVERUBVROR
==> file_4 <==
>6GH3 AA
NBVUIREVOIAWRHRUGRTYUVDNJKDFHUGSEI
FHUIERBLUUIREB
>6GH4 AA
BDFUIGEVUERERHOBERIHBSDLKFJBNIERIH
NFHILRUGAURHG
thanasis@basis:~/Documents/development/temp>
```
答え2
あなたはそれを使用することができますcsplit
:
csplit --prefix file_ --elide-empty-files --suppress-matched file '/^>....$/' '{*}'
必要なコンテンツfile_00
で名前が付けられた4つのファイルが作成されます。_03
答え3
使用のawk+sed
組み合わせ:
awk -v f="wfile_" '
/^>/ && length==5 {
if (a++) print p, ",", NR-1, f a-1
p=NR+1
}
END {print p, ",$" f a}' < file |
split -l 10
for f in x*; do
sed -nf "$f" file
done
awkを使用してブロックスタータの行番号を決定し、/^>.{4}$/
適切なsedコードを構築します。