如何在awk变量中使用awk变量?

时间:2018-08-10 06:01:00

标签: string variables awk

所以,我有这样的代码:

#!/bin/bash
awk -v ip="10.0.7.1" -v no="8" -v line='#BalancerMember "ajp://" ip ":8009" route=node" no " loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60' '
/ProxySet lbmethod=byrequests/{
print "             " line ORS $0
next
}
1' /tmp/000-site.conf > /tmp/000-site.conf.tmp && mv /tmp/000-site.conf.tmp /tmp/000-site.conf

因此,我无法在awk变量ip中使用awk变量noline

2 个答案:

答案 0 :(得分:1)

我刚刚在GNU awk系统中测试了以下内容:

awk -v val1="test" -v val2=val1 'BEGIN{print val1, val2}'

哪个不起作用,输出为:

test val1

因此,如果您要使用多个变量,为什么不像下面这样在主awk程序本身中使用它们(仅作为示例,您也可以将其应用于代码中)

awk -v val1="test" -v val2="test2" 'BEGIN{print val1, val2,val1}'

您可以尝试破坏变量,并且如果某人的值在其他值中很常见,尽管在-v的{​​{1}}中提到了它们,但仍然提到它们。



解决方案2:或者,尽管使用print,您也可以在awk的{​​{1}}部分中提及变量,然后它应该可以工作。

-v

答案 1 :(得分:1)

如果您不在awk脚本中使用变量noip,最简单的方法是将这些变量用作bash变量:

ip="10.0.7.1";no="8"; awk -v line="#BalancerMember \"ajp://${ip}:8009\" route=node${no} loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60" ...