0

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

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

这有任何意义吗?

任何帮助表示赞赏!

4

1 回答 1

1

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

awk '{do something}' RS='=' input.file
于 2015-07-06T12:11:56.790 回答