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 '{ }'