我有一个很长的文件(是的,这是 fasta 格式的 DNA),它实际上是一批拼凑在一起的几个文件,在标准输出上输出。例如:
>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
我也想避免编写临时文件,因为我担心它也会非常低效。
这有任何意义吗?
任何帮助表示赞赏!