根据模式拆分长文件(在标准输出上)并将其输入到循环中
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
我有一个很长的文件(是的,这是 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