awk中如何使用shell的环境变量
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名
一:"'$var'"
这种写法你们无需改变用'括起awk程序的习惯,是老外经常使用的写法.
如:
var="test"
awk 'BEGIN{print "'$var'"}'
这种写法其实际是双括号变为单括号的常量,传递给了awk.
若是var中含空格,为了shell不把空格做为分格符,便应该以下使用:
var="this is a test"
awk 'BEGIN{print "'"$var"'"}'
二:'"$var"'
这种写法与上一种相似.
若是变量含空格,则变为'""$var""'较为可靠.
三.把括起awk程序的''变为"",使用"$var"
如:
$var="this is a test"
awk 'BEGIN{print "$var"}"
这是由于在""里$是特殊字符,而在''里$是普通字符.
四:export 变量,使用ENVIRON["var"]形式
如:
$var="this is a test";export $var
awk 'BEGIN{print ENVIRON["var"]}'
五:固然也可使用-v选项
如:
$var="this is a test"
awk -vnvar="$var" '{print nvar}'
这样便把系统变量定义成了awk变量.
偶喜欢使用第一种写法.
欢迎交流.
awk中使用shell的环境变量
一:"'$var'"
这种写法你们无需改变用'括起awk程序的习惯,是老外经常使用的写法.如:
var="test"
awk 'BEGIN{print "'$var'"}'
这种写法其实际是双括号变为单括号的常量,传递给了awk.
若是var中含空格,为了shell不把空格做为分格符,便应该以下使用:
var="this is a test"
awk 'BEGIN{print "'"$var"'"}'
二:'"$var"'
这种写法与上一种相似.若是变量含空格,则变为'""$var""'较为可靠.
三.把括起awk程序的''变为"",使用"$var"
如:
$var="this is a test"
awk 'BEGIN{print "$var"}"
这是由于在""里$是特殊字符,而在''里$是普通字符.
四:export 变量,使用ENVIRON["var"]形式,
如:
$var="this is a test";export $var
awk 'BEGIN{print ENVIRON["var"]}'
五:固然也可使用-v选项
如:
$var="this is a test"
awk -vnvar="$var" '{print nvar}'
这样便把系统变量定义成了awk变量.php
二.在awk中给系统变量附值html
eval $(awk 'BEGIN{print "a=ggg b=3"}')shell
eval $(grep -v '#' "$CONFFILE" | awk 'BEGIN{FS="|"} NR=="'$var_list'"{printf("HOST=\"%s\" MAX=\"%s\" EMAILLIST=\"%s\" PHONE=\"%s\"\n",$1,$2,$3,$4)}')bash
http://hi.baidu.com/%CA%AB%D5%B9/blog/item/ad30993d12c69700bba16776.htmlide
#!/bin/bash
# Filename:varialbe
var=11111
echo "The initial varibale is set to $var"
var1=$(awk 'BEGIN{print '"$var"'}')
echo "1. use '\"\"' to get variable,var=${var1}"
var2=$(awk 'BEGIN{print "'$var'"}')
echo "2. use \"''\" to get variable,var=${var2}"
var3=$(awk 'BEGIN{print '$var'}')
echo "3. use '' to get variable,var=$var3"
var4=$(awk 'BEGIN{print "$var"}')
echo "4. use \"\" to get variable,var=${var4}"
awk -v var5=$var 'BEGIN{printf("5. use -v optin to get variable %s\n",var5)}'
程序输出结果:this
[root@server shell]# ./variable
The initial varibale is set to 11111
1. use '""' to get variable,var=11111
2. use "''" to get variable,var=11111
3. use '' to get variable,var=11111
4. use "" to get variable,var=$var
5. use -v optin to get variable 11111
[root@server shell]#
这个例子包含了几种awk使用shell变量和shell变量获取awk结果的句子
发现使用'"$shell_variable"' "'$shell_variable'" '$shell_variable' awk -v 四种方式都可
而使用 "$shell_variable" 则不行。
刚才看了
http://bbs.chinaunix.net/viewthr ... &extra=page%3D1 这个帖子提的问题, ly5066113的回答颇有道理,因此我这个例子稍做改动也会发现出现相似的问题:(将shell变量初始赋值为aaaaa) #!/bin/bash # Filename:varialbe var=aaaaa echo "The initial varibale is set to $var" var1=$(awk 'BEGIN{print '"$var"'}') echo "1. use '\"\"' to get variable,var=${var1}" var2=$(awk 'BEGIN{print "'$var'"}') echo "2. use \"''\" to get variable,var=${var2}" var3=$(awk 'BEGIN{print '$var'}') echo "3. use '' to get variable,var=$var3" var4=$(awk 'BEGIN{print "$var"}') echo "4. use \"\" to get variable,var=${var4}" awk -v var5=$var 'BEGIN{printf("5. use -v optin to get variable %s\n",var5)}' 程序输出则以下结果: [root@server shell]# ./variable The initial varibale is set to aaaaa 1. use '""' to get variable,var= 2. use "''" to get variable,var=aaaaa 3. use '' to get variable,var= 4. use "" to get variable,var=$var 5. use -v optin to get variable aaaaa [root@server shell]# 发现只有使用 "''" 和 -v 选项的形式是正确的;用ly5066113的回答就能够解释出错的缘由了 QUOTE:$ awk 'BEGIN{print 123}' 123 $ awk 'BEGIN{print abc}' $ awk 'BEGIN{print "abc"}' abc 恩,个人理解是print abc,就是打印awk内部变量abc的值,由于abc没有被赋值,因此就是空;而print "abc"则就是打印字符串abc;至于print 123,是由于变量名不能以数字开头,因此也变成了打印数字123。 var赋值成11111的时候,被awk解析成字符串,全部也能正常打印出来 var赋值成aaaaa的时候,被awk解析为内部变量输出,而内部变量没有初始化,因此输出为空)。 放到一块儿概括一下,建议你们引用变量的时候使用如下两种形式引用shell变量,防止出差错: "'$shell_variable'" (注意外面双引号,里面单引号) 或者采起 awk -v awk_var=$shell_varialbe '{ }'