這裡提到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,就可以直接獲得環境變數。它是乙個字典陣列。環境變數名 就是它的鍵值。
三,awk 設定變數值,shell指令碼引用
line="127.0.0.1
6379
3333eeess";
eval $(echo $line |awk -f ' ' '');
結果:echo $host
127.0.0.1
echo $port
6379
echo $passwd
3333eeess
四,切換for line in `cat $1`預設換行符 前
#替換預設換行符
ifs_old=$ifs
ifs=$'\n'
後ifs=$ifs_old
AWK呼叫SHELL,並將變數傳遞給SHELL
在shell指令碼中呼叫awk是非常自然和簡單的,以前還寫過乙個關於awk shell相互傳遞變數的文章 awk與shell之間的變數傳遞方法 在awk指令碼中,如果需要呼叫shell指令碼 命令,則需要使用system 函式,如果需要將變數傳遞給被呼叫的shell,則寫為 system sh my...
AWK呼叫SHELL,並將變數傳遞給SHELL
在shell指令碼中呼叫awk是非常自然和簡單的,以前還寫過乙個關於awk shell相互傳遞變數的文章 awk與shell之間的變數傳遞方法 在awk指令碼中,如果需要呼叫shell指令碼 命令,則需要使用system 函式,如果需要將變數傳遞給被呼叫的shell,則寫為 system sh my...
awk中使用shell變數
其實在awk裡,是不能直接使用shell變數的 方法是 awk v 選項讓awk 裡使用shell變數 time 60 awk v time time begin 這樣要注意 在awk裡,time不能加 符號。網上說如下方法都可行 一 var 這種寫法大家無需改變用 括起awk程式的習慣,是老外常用...