arrays - 如何通过空行将文本文件拆分为数组?
问题描述
我有一个 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 的输出保存到数组而不是打印出来。有人可以指出我正确的方向吗?
解决方案
您可以在使用带有空的 gnu 命令readarray
读取文件后使用命令填充 bash 数组,该命令允许在空行上拆分记录并使用( NUL) 字节:awk
RS
awk
ORS
\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
推荐阅读
- python - 如何求和找到几个日期时间的平均值
- kql - Kusto 查询如何将表中的每一行作为参数进行迭代以在另一个表中查询?
- java - 如何修复 Java Swing JFrame 的大小错误
- c++ - 嵌套类的模板模板参数的可变类型模板参数和非类型模板参数如何相互约束?
- php - 如何在 PHP 中加二?
- prolog - Prolog递归迭代列表失败
- python - 在 Ruby / Python 中实现 Umbraco/ASP.NET 密码验证脚本
- r - R - 在新数据框中:如果单元格与同一行的另一列匹配,则
- python - python 新手,在 while 和 ifs 上有问题
- android - 将整个布局转换为图像/位图