【发布时间】:2020-01-28 19:54:22
【问题描述】:
我有一个看起来像这样的文本文件
[begin]
line1a
line2a
[end]
[begin]
line1b
line2b
[end]
[begin]
line1c
line2c
[end]
每个组都有相同数量的行(在这种情况下为 4,包括开始和结束标记),并且在一个文件中我有许多这样的行组。
我知道split 命令可以在保留行的同时将文件拆分为 N 个文件,但我想将该文件按行组拆分为 N 个文件。所以在这种情况下,每个输出文件应该只包含完整的 4 行组。例如,要拆分为 2 个文件,输出将是
#file1
[begin]
line1a
line2a
[end]
[begin]
line1b
line2b
[end]
#file2
[begin]
line1c
line2c
[end]
是否有任何 Bash 工具可以做到这一点?
【问题讨论】:
-
您应该寻找正则表达式解决方案(sed、awk ..)
-
为什么不是 3 个文件各一组?为什么前两组在一个文件中?
-
@KamilCuk 在示例中,我只想将较大的文件拆分为 2 个文件。如果分成 3 个文件,那么我同意每个文件应该有 1 个组。
-
哎呀,那为什么不是这样:第一个文件中的一个组,第二个文件中的两个组?你不能只是
split -l4然后合并它们吗?我认为split -l4 -n2会为指定的输入做你想做的事。 -
@KamilCuk 这对于 3 个组来说似乎是合理的,但该文件可能有数千个组。然后进行合并变得复杂,以使所有结果文件具有大致相同数量的组