這裡提到awk,相信寫shell的朋友都會接觸到。awk 是一種用於處理文字的程式語言工具。awk 提供了極其強大的功能:
可以進行正規表示式的匹配
樣式裝入
流控制數**算符
程序控制語句
內建的變數和函式
可以把awk看作一門完全的程式語言,它處理文字的速度是快得驚人的。現在很多基於shell 日誌分析工具都可以用它完成。設計簡單,速度表現很好。 涉及到以上六個方面內容,我會在以後文章中加以介紹。 這次主要說下,怎麼樣把外部變數傳入到awk執行語句中。
一、基礎:
awk [ -f re] [parameter...] ['pattern ' ] [-f progfile][in_file...]
awk一般語法如上面所說。
如:
[chengmo@localhost ~]$ echo 'awk code' | awk 'beginend'在 awk中兩個特別的表示式,begin和end,這兩者都可用於pattern中(參考前面的awk語法),提供begin和end的作用是給程式賦予初始狀態和在程式結束之後執行一些掃尾的工作。任何在begin之後列出的操作(在{}內)將在awk開始掃瞄輸入之前執行,而end之後列出的操作將在掃瞄完全部的輸入之後執行。因此,通常使用begin來顯示變數和預置(初始化)變數,使用end來輸出最終結果。start
**********===
awk code
*****====
end
二、獲得外部變數方法
1、獲得普通外部變數[chengmo@localhost ~]$ test='awk code'
[chengmo@localhost ~]$ echo | awk '' test="$test"
awk code
[chengmo@localhost ~]$ echo | awk test="$test" ''
awk: cmd. line:1: fatal: cannot open file `' for reading (no such file or directory)
格式如:awk 『』 變數名=變數值 ,這樣傳入變數,可以在action中獲得值。 注意:變數名與值放到』』後面。
[chengmo@localhost ~]$ echo | awk 'begin' test="$test"
這種變數在:begin的action不能獲得。
2.begin程式塊中變數
[chengmo@localhost ~]$ test='awk code'
[chengmo@localhost ~]$ echo | awk -v test="$test" 'begin'
awk code
[chengmo@localhost ~]$ echo | awk -v test="$test" ''
awk code
格式如:awk –v 變數名=變數值 [–v 變數2=值2 …] 'begin』注意:用-v 傳入變數可以在3中型別的action 中都可以獲得到,但順序在 action前面。
3.獲得環境變數
[chengmo@localhost ~]$ awk 'begin}'
awkpath=.:/usr/share/awk
ssh_askpass=/usr/libexec/openssh/gnome-ssh-askpass
selinux_level_requested=
selinux_role_requested=
lang=en_us.utf-8
.......
只需要呼叫:awk內建變數 environ,就可以直接獲得環境變數。它是乙個字典陣列。環境變數名 就是它的鍵值。
外部變數和靜態變數
外部變數是在函式外部定義的全域性變數,它的作用域是從變數的定義處開始,到本程式檔案的結尾。在此作用域內,全域性變數可為各個函式所引用。編譯時將外部變數分配在靜態儲存區。有時需要在其他檔案中使用extern來宣告外部變數,以擴充套件外部變數的作用域。也可用static宣告外部變數,使該變數不能被其他檔...
外部變數與extern
b 外部變數 b 顧名思義就是定義在函式之外的變數。它只能定義一次,定義後編譯程式將為它分配儲存單元。如果需要訪問外部變數,則必須宣告相應的外部變數,宣告時可以用 b extern b 語句 b 顯示宣告 b 也可以通過上下文來 b 隱式宣告 b 比如 int max 5 main 這是顯示宣告。當...
shell awk引用外部變數
在使用awk的過程中,經常會需要引用外部變數,但是awk需要使用單引號將print包起來,導致print後的 引用無效,可以採用下面的方式 例如 bin bash a line1 line2 line3 for i 1 i 3 i doecho a awk done 上面這個指令碼執行的時候,會輸出...