arrays - 如何按空行将文本文件拆分为数组?

标签 arrays bash shell awk

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


Header 1
- Point 1
- Point 2

Header 2
- Point 1
- Point 2

Header 3
-Point 1
- Point 2

...

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

Header 1
- Point 1
- Point 2

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

我在看这样的东西Separate by blank lines in bash但我对 bash 完全陌生,所以我不明白如何将 awk RS=null 的输出保存到数组而不是打印出来。有人可以指出我正确的方向吗?

最佳答案

在使用 gnu awk 命令读取文件后,您可以使用 readarray 命令填充 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

关于arrays - 如何按空行将文本文件拆分为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673497/

相关文章:

linux - <() 在 Bash 中做什么?

javascript - 如何最好地从一个数组中未包含在第二个数组中的对象创建对象数组

c++ - 指针/引用数组?

python - 从 shell 脚本中表的最后一行中提取值

bash - UNIX 中的模式匹配解释

java - Netbeans 和 shell 窗口之间的不同行为

linux - BASH:找到字符串并打印上面的所有相关注释

linux - 创建一个 awk 脚本来读取另一个 awk 文件的输出并实现总和和平均值

javascript - 如何更改数组内的多个对象?

java - 打印数组 : memory address or its content?