使用非特定分隔符提取大型数据集的块

Extracting blocks of a large data set with non-specific separators

我正在 linux 服务器上工作,并且有一个非常大的数据集,其结构如下:

long block of data
;
long block of data
;
long block of data
;
long block of data
...

任何数据块都没有什么独特之处,但我喜欢根据其相对于分隔符的位置抓取一个块并将其保存到一个新的文本文件中。例如,向下的第三个块将包括第二个和第三个分隔符 (;) 之间的所有内容。

如果有人对此有任何建议,将不胜感激!

提前致谢!

你可以使用 AWk。这是提取第三个块的示例:

cat <datasetfile> | awk '/^;/ { if (flag==1) exit; line++; } /^[^;]/ { if (line==2) { print [=10=]; flag=1; } }'

为此使用 awk

awk -v num_block=2 -v RS='\n;\n' 'NR == num_block' /path/to/my/data.txt

这将显示编号为 num_block 的块。

说明:默认情况下,awk对行进行操作。通过将 RS 重新定义为由单个分号组成的一行,我们指示它对由 RS.

分隔的文本块进行操作

[更新]优化:你有一个“非常大的数据集”。找到第 N 个块后无需解析输入文件,因此让我们添加对 exit.

的调用
awk -v num_block=2 -v RS='\n;\n' 'NR == num_block { print; exit }' /path/to/my/data.txt