awk的使用 第十三部分 awk的字串和數學函式

2021-05-24 09:41:53 字數 3821 閱讀 6251

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 程式一開始執行,...