如何用空行将文本文件拆分为数组?

时间:2019-08-27 11:14:55

标签: arrays bash shell awk

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


Header 1
- Point 1
- Point 2

Header 2
- Point 1
- Point 2

Header 3
-Point 1
- Point 2

...

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

Header 1
- Point 1
- Point 2

如果满足某些条件,我想编辑数组中的某些数据。

我一直在寻找类似Separate by blank lines in bash的东西,但是我对bash还是完全陌生的,所以我不知道如何将awk RS = null的输出保存到数组而不是打印出来。有人可以指出正确的方向吗?

1 个答案:

答案 0 :(得分:6)

使用gnu readarray命令读取文件后,您可以使用awk命令填充bash数组,并使用空RS来使awk在空行上拆分记录并使用ORS\0(NUL)个字节:

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

Online Demo