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

C J*_*C J 2 arrays bash shell awk

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


Header 1
- Point 1
- Point 2

Header 2
- Point 1
- Point 2

Header 3
-Point 1
- Point 2

...
Run Code Online (Sandbox Code Playgroud)

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

Header 1
- Point 1
- Point 2
Run Code Online (Sandbox Code Playgroud)

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

我正在看这样的东西,用bash中的空白行分隔,但是我对bash还是陌生的,所以我不知道如何将awk RS = null的输出保存到数组而不是打印出来。有人能指出我正确的方向吗?

anu*_*ava 6

您可以使用readarray命令与GNU阅读您的文件后,填充一个bash数组awk与空命令RS,让awk在空行分割记录和使用ORS作为\0(NUL)字节:

IFS= readarray -d '' arr < <(awk -v RS= -v ORS='\0' '1' file)
Run Code Online (Sandbox Code Playgroud)

检查输出:

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
Run Code Online (Sandbox Code Playgroud)

在线演示

  • ++ ve先生很好的解决方案先生。 (2认同)