2011-08-19 137 views
0

我试图在bash脚本中将一个变量传递给nawk,但它实际上并不打印$commentValue变量的内容。除了printf语句的最后部分之外,一切都很好。谢谢!在bash中将变量传递给nawk?

echo -n "Service Name: " 

read serviceName 

echo -n "Comment: " 

read commentValue 

for check in $(grep "CURRENT SERVICE STATE" $nagiosLog |grep -w "$serviceName" | nawk -F": " '{print $2}' |sort -u) ; do 
    echo $check | nawk -F";" -v now=$now '{ printf("[%u]=ACKNOWLEDGE_SVC_PROBLEM;"$1";"$2";2;1;0;admin;$commentValue"\n", now)}' >> $nagiosCommand 

done 

回答

1

$commentValue是调用到nawk里面,所以它被认为是在nawk一个变量,在bash不是变量。由于您在nawk中没有这样的变量,因此您不会在其中获得任何内容。您应该先使用-v开关通过变量“inside”nawk,就像您为now变量所做的那样;即:

... | nawk -F";" -v now=$now -v "commentValue=$commentValue" 

请注意引号 - 如果$commentValue包含空格,则需要引号。

+0

嗯,我修改了命令,但它仍然只是打印单词“commentValue”而不是内容。 echo $ check | nawk -F“;” -v now = $ now -v“commentValue = $ commentValue”'{printf(“[%u] = ACKNOWLEDGE_SVC_PROBLEM;”$ 1“;”$ 2“; 2; 1; 0; admin; commentValue \ n”,now)} '>> $ nagiosCommand – user63019

+0

它应该是:''echo $ check | nawk -F“;” -v now = $ now -v“commentValue = $ commentValue”'{printf(“[%u] = ACKNOWLEDGE_SVC_PROBLEM;”$ 1“;”$ 2“; 2; 1; 0; admin;%s \ n” commentValue)}'>> $ nagiosCommand''。请阅读awk手册中的''printf''文件。 –

+0

Ahhhh,duh。以前我做过,但是最后的结尾是“谢谢! – user63019