我認爲在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