从一个awk命令分配bash变量?

时间:2018-04-04 10:35:03

标签: bash awk

希望有人可以帮助我提高我的awk命令效率!

假设我的文本文件大约有30行这类东西:

ENTIRE:11.3.28.4.0
OSVER:Solaris11
VARFREE:3G

我将这些变量分配给bash脚本中的变量,如下所示:

ENTIRE=$(awk -F\: '$1 ~ /ENTIRE/ {print $2}' $HOSTFILE)
RELEASE=$(awk -F\: '$1 ~ /RELEASE/ {print $2}' $HOSTFILE)
OSVER=$(awk -F\: '$1 ~ /OSVER/ {print $2}' $HOSTFILE)

因为我有大约30个,这意味着awk运行30次,这很慢,显然不是最佳方式。

有人可以建议我如何将这些构建成一个awk命令吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您根本不需要awk。如果不能修改原始文件,请使用while循环和declare命令来定义每个变量。

while IFS=: read name value; do
    declare "$name=$value"
done < "$HOSTFILE"

一个例子:

$ IFS=: read name value <<< "foo:bar"
$ declare "$name=$value"
$ echo "$foo"
bar