如何用空行将文本文件拆分为数组? [英] How do I split a text file into an array by blank lines?

查看:72
本文介绍了如何用空行将文本文件拆分为数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个bash命令,它以以下格式输出文本:

I have a bash command that outputs text in the following format:


Header 1
- Point 1
- Point 2

Header 2
- Point 1
- Point 2

Header 3
-Point 1
- Point 2

...

我想将此文本解析为一个数组,在空行上分开,以便array [0]例如包含:

I want to parse this text into an array, separating on the empty line so that array[0] for example contains:

Header 1
- Point 1
- Point 2

然后,如果要满足某些条件,我想编辑数组中的某些数据.

And then I want to edit some of the data in the array if it satisfies certain conditions.

我正在查看类似这样的内容以bash中的空白行分隔但是我对bash完全陌生,所以我不了解如何将awk RS = null的输出保存到数组而不是将其打印出来.有人可以指出正确的方向吗?

I was looking at something like this Separate by blank lines in bash but I'm completely new to bash so I don't understand how to save the output from awk RS=null to an array instead of printing it out. Could someone please point me in the right direction?

推荐答案

使用gnu awk 命令读取文件后,可以使用 readarray 命令填充bash数组空的 RS ,它允许 awk 在空行上分割记录,并使用 ORS 作为 \ 0 (NUL)字节:

You can use readarray command to populate a bash array after reading your file with gnu awk command with empty RS that lets awk split records on empty lines and using ORS as \0 (NUL) byte:

IFS= readarray -d '' arr < <(awk -v RS= -v ORS='\0' '1' file)

检查输出:

echo "${arr[0]}"
Header 1
- Point 1
- Point 2

echo "${arr[1]}"
Header 2
- Point 1
- Point 2

echo "${arr[2]}"
Header 3
-Point 1
- Point 2

在线演示

这篇关于如何用空行将文本文件拆分为数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆