如何在匹配的字符串之间添加一行到1个数组索引

时间:2016-09-18 17:54:44

标签: arrays bash awk sed grep

我有一个包含以下数据的文本文件。

headline
text1
text2
text3
footnote

headline
text1
text2
text3
footnote

我想将每个标题和相应的脚注(包括)之间的所有内容添加到数组索引中。

sed似乎在获取我需要的行方面工作正常。

sed -n '/headline/,/footnote/p' text.txt

但是,将它们添加到数组中并不是很好,因为每行都会添加到自己的数组索引中。我试图找到一种方法,将每个标题添加到单个索引中,文本和后面的1个脚注。这可能吗?

declare -a array
array=($(sed -n '/headline/,/footnote/p' text.txt))`

PS。我没有必要使用sed。也欢迎AWK(或其他)解决方案。

1 个答案:

答案 0 :(得分:0)

你可以像这样使用while循环:

array=()
while read -r -d '' chunk; do
    array+=("$chunk")
done < <(awk -vRS='\n\n' -vORS='\0' '{print $0}' text.txt)

基本思想是使用awk逐段读取输入,然后输出由空字符分隔的段落。我们使用awk读取read的输出,每次都停在空字符处,然后将其附加到数组中。