我认为在linux下awk是个好东东啊,处理一些文本文件会很是方便。而在Linux下嘛,常常会和shell打交道,因此awk和shell之间的变量相互传递,有时仍是颇有必要的,因此简单总结一下吧。html
awk中使用shell中的变量linux
一: “‘$var'”shell
这种写法你们无需改变用‘括起awk程序的习惯,是老外经常使用的写法.如:bash
var=”test”
awk ‘BEGIN{print “‘$var'”}’ide
这种写法其实际是双括号变为单括号的常量,传递给了awk.post
若是var中含空格,为了shell不把空格做为分格符,便应该以下使用:this
var=”this is a test”
awk ‘BEGIN{print “‘”$var”‘”}’
二: ‘”$var”‘spa
这种写法与上一种相似.若是变量含空格,则变为‘””$var””‘较为可靠.
三: export 变量,使用ENVIRON[“var”]形式,获取环境变量的值.net
例如:
var=”this is a test”; export var;orm
awk ‘BEGIN{print ENVIRON[“var”]}’
四: 可使用awk的-v选项 (若是变量个数很少,我的偏向于这种写法)
例如:
var=”this is a test”
awk -v awk_var=”$var” ‘BEGIN {print awk_var}’
这样便把系统变量var传递给了awk变量awk_var.
awk向shell变量传递值
“由awk向shell传递变量”,其思想无非是用awk(sed/perl等也是同样)输出若干条shell命令,而后再用shell去执行这些命令。
eval $(awk ‘BEGIN{print “var1=’str1′;var2=’str2′”}’)
或者eval $(awk ‘{printf(“var1=%s; var2=%s; var3=%s;”,$1,$2,$3)}’ abc.txt)
以后能够在当前shell中使用var1,var2等变量了。
echo “var1=$var1 —– var2=$var2”
参考资料:
http://developer.51cto.com/art/200509/3781.htm
http://www.ixpub.net/thread-1457438-1-1.html