所以,我有这样的代码:
#!/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变量no
和line
。
答案 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脚本中使用变量no
和ip
,最简单的方法是将这些变量用作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" ...