我有一个以下列格式输出文本的 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
关于arrays - 如何按空行将文本文件拆分为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673497/