根据模式拆分长文件(在标准输出上)并将其输入到循环中

Split a long file (on stdout) according to a pattern and input that into a loop

我有一个很长的文件(是的,这是 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

我也想避免写入临时文件,因为我担心它也会非常低效。

这有意义吗?

感谢任何帮助!

我会使用 awk,并将记录分隔符设置为 =

awk '{do something}' RS='=' input.file