【发布时间】:2016-07-25 11:59:53
【问题描述】:
我有一些数据存储在一个平面文件中,类似于下面显示的数据。我需要能够将数据提取到变量中,例如变量 AGE 等于 24,变量 user 等于 user01。我还需要能够知道数据是用于哪个数据库的,例如 db[0] 和 db[1] 等等。
db[0].age="24"
db[0].user="user01"
db[0].password="pasword01"
db[0].office="usa office 1"
db[1].age="44"
db[1].userID="user01"
db[1].userPW="password02"
db[1].office="uk office 2"
到目前为止,我所做的是使用 awk 搜索所有年龄实例,并将方括号中的数字提取到数组中。
databaseCount=($(awk '/'"age"'/' flatFile | cut -d "[" -f2 | cut -d "]" -f1))
我当时正在考虑使用类似的 awk 来提取括号中的文本并将该数据放入数组中。
age=($(awk '/'"dbUserAlias"'/' flatFile | cut -d\" -f2))
然后我打算使用 databaseCount 来查找 weach 数组的数据,所以我会知道在 age 数组的元素 0 中找到的数据是针对数据库 0 的,而在元素 1 中找到的数据是在数据库 1 中找到的数据。
我遇到的问题是在语音标记之间找到的一些文本有空格。
echo ${office[0]}
将返回“uk”而不是“uk office 2”。
有谁知道如何解决这个问题,或者是否有更好的方法来提取数据?
谢谢。
【问题讨论】:
-
您是否有需要此数据的现有 bash 脚本?或者您只是想为一些尚未成文的脚本处理这个问题?如果是后者,那么直接在 awk 中完成所有操作。实际上,该输入实际上已经是有效的 awk(如果需要,可以将其操作为有效的 awk 或由可能“更安全”的 awk 解析)。试图将其分割成 shell 数组是自找麻烦。