awk 的內建函式(built-in functions)
一、字串函式
語法:index( 原字串,尋找的子字串):
解釋:若原字串中含有欲找尋的子字串,則返回該子字串在原字串中第一次出現的位置,如果沒有出現該子字串則返回0。
例如執行:
[root@myfreelinux pub]# awk 『begin』
5 是返回值,實際上檢索到「-8」時,「-」在第五位,所以返回值就是5了。
語法:length(字串)
解釋:返回該字串的長度。
例如執行:
[root@myfreelinux pub]# awk 『begin』
14 是返回值
語法:match( 原字串,尋找對比的正規表示式)
解釋:awk會在原字串中尋找復合正規表示式的子字串,如果復合正規表示式的字串有多個,以原字串中最左側的子字串為準。
awk找到該字串後會根據字串設定以下awk內部變數的值,比如rstart和rlength
rstart=符合條件的子字串在原字串中的位置,如果=0表示沒有找到合條件的子字串。
rlength = 符合條件的子字串長度,如果=-1表示沒有找到符合條件的子字串。
比如看一下兩個例子:
[root@myfreelinux pub]# awk 『begin』
2 2[root@myfreelinux pub]# awk 『begin』
2 4可以看到這兩條語句執行的結果不一樣,因為第一條的正規表示式只是尋找「an」,而第二條是尋找」an」的多個多個重複組合,所以有兩組」an」,長度是4。
語法:split( 原字串,陣列名稱,分隔字元)
解釋:awk將根據指定的分隔字元(field separator)來分隔原字串,將原字串分割成乙個個的域(field),並以指定的陣列儲存各個域的值。
例如:[root@myfreelinux pub]# awk 『begin』
4 05 root
6 /root
7 /bin/bash
1 root
2 x3 0
語法:sprintf(格式字串,項1,項2,….)
解釋:該函式的用法與awk或c語言的輸出函式printf()相似,不同的是sprintf()會要求列印出的結果當成乙個字串返回。一般常用sprintf()來改變資料格式。例如:x為一數值,若欲將其變成乙個含二位小數的數值,可執行如下指令:
[root@myfreelinux pub]# awk 『begin』,執行結果是2.00
語法:sub( 比對用的正規表示式,新字串,原字串)
解釋:sub( )將原字串中第乙個(最左邊)符合正規表示式的子字串替換為新字串。第二個引數「新字串」中可用」&」來表示「符合條件的字串」。承上例,執行下列指令:
[root@myfreelinux pub]# awk 『begin』
a6b12[anan212].456an12
[root@myfreelinux pub]# awk 『begin』
a6b12|anan212|.456an12
[root@myfreelinux pub]# awk 『begin』
a6b12.456an12
[root@myfreelinux pub]# awk 『begin』
a6b12999.456an12
由以上四個例子可以看出,&表示匹配的字串,對於新字串,需要用雙引號引起來,比如「999」,那麼匹配的字串就會替換成999,而如果雙引號內沒有任何字元的時候,就是將匹配的字串給刪除。
sub() 與match()搭配使用,可依次取出原字串中符合指定條件的所有子字串。 例如執行下列程式:
[root@myfreelinux pub]# vi submatch.awk
#!/bin/awk
begin #匹配的數字列印後,用空字串代替,原data字串內容發生變化
}執行並檢視執行結果如下:
[root@myfreelinux pub]# awk -f submatch.awk
12p-p24 p56-p66
24p-p p56-p66
56p-p p-p66
66p-p p-p awk 『 begin
}[root@myfreelinux pub]# awk -f submatch.awk
12p-p p-p #輸出結果只有兩行,這就是sub和gsub的不同點
通過上面這個例子,對比一下sub中的例子,就能明顯的區分出sub和gsub函式的區別。
語法:substr( 字串,起始位置 [,長度] )
解釋:返回從起始位置起,指定長度的子字串,如果沒有指定長度,則返回起始位置到字串末尾的子字串。 看下例:
[root@myfreelinux pub]# awk 『begin』
love todays life
[root@myfreelinux pub]# awk 『begin』
love
注意空格也算字元。
(二)、 數學函式
語法:int(x)
解釋:返回x的整數部分,去掉小數。看下例:
[root@myfreelinux pub]# awk 『begin』 #注意int函式是向零取整,而不是四捨五入
5 -5
語法:sqrt(x)
解釋:返回x的平方根。 看下例:
[root@myfreelinux pub]# awk 『begin』
awk: warning: sqrt: called with negative argument -9
2 nan
通過上例看以看到,如果是乙個負數,比如-9,系統會提示非法引數(negative argument),並輸出nan。
語法:exp(x)
解釋:將返回e 的x次方。 看下例:
[root@myfreelinux pub]# awk 『begin』
2.71828 7.38906
語法:log(x)
解釋:返回x以e為底的對數值。看下例:
[root@myfreelinux pub]# awk 『begin』
awk: warning: log: received negative argument -2
0.999999 nan
可以看出,和執行sqrt(x)一樣,x同樣不能是負數,否則提示引數錯誤,並返回nan值。
語法:sin(x)
解釋:x 須以弧度為單位,sin(x)將返回x的sin函式值。
語法:cos(x)
解釋:x 須以弧度為單位,cos(x)將返回x的cos函式值
語法:atan2(y,x)
解釋:返回y/x 的tan反函式之值,返回值係以弧度為單位。
語法:rand()
解釋:返回介於0與1之間的(近似)隨機數值,0 語法:srand([x])
解釋:指定以x為rand( )函式起始的種子。如果省略了x,則awk會以執行時的日期與時間為rand()函式起始的種子。
awk的使用 第十三部分 awk的字串和數學函式
awk 的內建函式 built in functions 一 字串函式 語法 index 原字串,尋找的子字串 解釋 若原字串中含有欲找尋的子字串,則返回該子字串在原字串中第一次出現的位置,如果沒有出現該子字串則返回0。例如執行 root myfreelinux pub awk begin 5 是返...
awk的使用 第十四部分 awk的內部變數
awk的內部變數的個數不多,在這裡介紹的時候就不按照字母順序排列了,而是按相關性分類說明。argc argc表示命令行上除了選項 f,v,f等選項及其所對應的引數之外的所有引數的個數。如果將 awk程式 直接寫在命令列上,那麼argc是不會把 awk程式 計算在內的。argv argv是乙個資料,用...
awk的使用 第十一部分 awk中常用的模式
awk 通過判斷模式 pattern 的值來決定是否執行其後對應的動作 actions 首先來看一下awk中幾個常見的模式,在前十部分中,有一些模式已經做了介紹,在這裡再總結一下 1 begin是awk 的保留字,是一種特殊的模式。begin 成立 其值為true 的時機是 awk 程式一開始執行,...