通过分隔符将行集合分组为数组元素

时间:2015-09-30 20:15:17

标签: arrays bash unix

我试图从看起来像这样的命令中获取输出:

Thing ID: 1234
    Object_Name = MyObject1
    Object_Owner = MeMyselfAndI

Thing ID: 5678
    Object_Name = MyObject2
    Object_Owner = MeMyselfAndI

并将这些行集合放入这样的数组中的自己的元素中(其中括号分隔数组的元素):

MyArray =

[   Thing ID: 1234
        Object_Name = MyObject1
        Object_Owner = MeMyselfAndI   ]
[   Thing ID: 5678
        Object_Name = MyObject2
        Object_Owner = MeMyselfAndI   ]

以便检索元素,例如

${MyArray[0]})

会产生以下结果:

Thing ID: 1234
    Object_Name = MyObject1
    Object_Owner = MeMyselfAndI

换句话说,我想在这里使用“Thing ID:”作为分隔符(各种各样的分隔符),但是将它保存在每个数组元素中。在bash中这可能吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以使用awk在每个块之后插入\0并使用该输出创建数组:

arr=()

while IFS= read -rd '' line; do
   arr+=("${line#$'\n'}")
done < <(awk -v RS= '{print $0 "\0"}' file)

检查输出:

echo "${arr[0]}"
Thing ID: 1234
    Object_Name = MyObject1
    Object_Owner = MeMyselfAndI    
echo "${arr[1]}"    
Thing ID: 5678
    Object_Name = MyObject2
    Object_Owner = MeMyselfAndI