私は非常に長いファイル (そうです、これは 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
一時ファイルへの書き込みも非常に非効率になるので避けたいと思います。
それは意味がありますか?
どんな助けでも大歓迎です!