我在一台linux服务器上工作,有一个非常大的数据集,其结构如下:
long block of data
;
long block of data
;
long block of data
;
long block of data
...任何数据块都没有什么特别之处,但是我想根据它相对于分隔符的位置来提取一个块,并将其保存到一个新的文本文件中。例如,向下的第三个块将包括第二个和第三个分隔符(;)之间的所有内容。
如果任何人对如何做到这一点有任何建议,将不胜感激!
提前感谢!
发布于 2021-04-29 01:45:16
使用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发布于 2021-04-29 01:41:17
你可以使用AWk。下面是提取第三个块的示例:
cat <datasetfile> | awk '/^;/ { if (flag==1) exit; line++; } /^[^;]/ { if (line==2) { print $0; flag=1; } }'https://stackoverflow.com/questions/67305169
复制相似问题