2017-12-27 299 views
0

我从系统中得到一个变量返回一个字符串,如:AWK显示变量

$VARIABLE/dir/text.file 

我tryed使用gsub,但我失去了一些东西:

onstat -c | grep ^MSGPATH | awk 'gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2}' 

返回错误:

awk: cmd. line:1: gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2} 
awk: cmd. line:1:      ^syntax error 
awk: cmd. line:1: gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2} 
awk: cmd. line:1:         ^0 is invalid as number of arguments for gsub 

可能是什么问题?

+0

你有一些onstat -c产生的输出吗? –

+0

但你想在awk中打​​印变量值吗?或者是什么? –

+0

它返回:$ INFORMIXDIR/tmp/online.log,我需要使用该值后,INFORMIXDIR是一个环境变量。 –

回答

2

因为awk正文是在单引号中,所以无法展开shell变量。安全地做到这一点的方式是通过与-v选项awk的值:

... | awk -v dir="$INFORMIXDIR" 'gsub (/\$INFORMIXDIR/, dir) {print $2}' 

注意,您必须逃脱正则表达式的$,因为它是一个特殊的正则表达式字符(意为“结束字符串“)

+0

上使用这个值,它就像一个魅力,谢谢! –