awk引用外部變量


一、用awk 有以下幾種方法去調用變量:

1.  awk '{print a, b}' a=111 b=222 yourfile

注意, 變量位置要在 file 名之前, 否則就不能調用。

還有, BEGIN{}中是不能調用這些的variable. 要用之后所講的第二種方法才可解決.

2.  awk –v a=111 v b=222 '{print a,b}' yourfile

注意, 對每一個變量加一個 –v 作傳遞.

3.  awk '{print " ' "$LOGNAME" ' "}' yourfile

如果想調用environment variable, 要用以上的方式調用, 方法是:

"  '  "  $LOGNAME  "  '  "

原文:

awk如何引用外部變量

http://hi.baidu.com/icqncvjhgmbbsyq/item/02ef096ac1d49c94c5d2495a

二、進一步解釋

3種方法為什么要加兩個雙引號和一個單引號?

$ str=Hello

$ awk 'BEGIN{print " '$str' "}'

Hello

看上去是雙引號套單引號,其實真正的原因為:

這是shell的功能,shell對單引號和雙引號,按從左到右的順序成對匹配

awk命令用單引號引起來,就是防止shell對其中內容進行解釋

awk '{print " '$str' "}' file

實際上就是2部分

1:awk '{print " '

2:'"}'

awk2個單引號內的命令起作用。

至於$str就被shell正常解釋為變量str的值。

所以,如果str=hello,則經解釋后成為,awk {print "hello"}file

而如果str=hello world,則解釋時,在解釋前一部分:awk {print " 后,在替換了變量后,變成了hello world,當shell讀到helloworld中間的空格時,認為這是IFS,於是,把他們放在於不同的域中,這樣解釋成了:

awk BEGIN{print "hello

world"}兩部分。

按照上面的解釋,就可以這么來修改,比如

a)$ awk 'BEGIN{print " ' "$a" ' "}'

或者

b)$ awk "BEGIN{print \"$a\"}"

或者

c)$ awk BEGIN\{print\""$a"\"\}

對於a,解釋成為:

awk BEGIN{print "hello world"} #因為$a在替換后,還在“”中包括中,所以當成了一個字符串處理。

三、總結

awk怎么說也是要運行在shell環境中的。所以,寫在awk中的命令,要先經過shell解析后,再交由awk來解釋和執行。

原文:

awk引用外部變量

http://hi.baidu.com/liheng_2009/item/6466a4c0e087222447d5c0c8

以下兩個鏈接給了更多的討論:

http://www.linuxsir.org/bbs/thread121709.html

http://bbs.chinaunix.net/thread-1381166-1-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM