0

私は非常に長いファイル (そうです、これは fasta 形式の DNA です) を持っていますが、これは実際にはいくつかのファイルをまとめてパッチし、stdout に出力したものです。例えば:

>id1
ACGT
>id2
GTAC
=
>id3
ACGT
=
>id4
ACCGT
>id6
AACCGT

このストリームをパターン (ここでは として示されています=) に従って分割し、各ピースに対して個別にアクションを実行したいと考えています。

私は次のようなものを調べました

myprogram | while read -d = STRING; do 
  # do something
done

しかし、大量の情報を変数に入れると非常に非効率になるのではないかと心配しています。さらに、 read (...) 自体が非効率的であることを読みました。

ピースをループに出力するようなものを見つけたいのですがcsplit、スマートなものを思いつくことができませんでした。理想的には、この非常に悪い擬似コードのようなものです:

myprogram | csplit - '=' | while csplit_outputs; do
  # do something with csplit_outputs
done

一時ファイルへの書き込みも非常に非効率になるので避けたいと思います。

それは意味がありますか?

どんな助けでも大歓迎です!

4

1 に答える 1