首页 > 解决方案 > 如何通过空行将文本文件拆分为数组?

问题描述

我有一个 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

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

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

标签: arraysbashshellawk

解决方案


您可以在使用带有空的 gnu 命令readarray读取文件后使用命令填充 bash 数组,该命令允许在空行上拆分记录并使用( NUL) 字节:awkRSawkORS\0

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

在线演示


推荐阅读