awk函式介紹

2021-07-17 03:15:39 字數 2221 閱讀 2191

awk提供了很多的函式提供給我們使用,現在簡單的介紹幾個內建函式。

1、split

split函式是用來將乙個字串進行劃分為陣列的函式:

split(「string」,」arrar_name」,」separator」)

其中第乙個引數為劃分的字串或者是變數,即我們想把那個變數變為陣列,第二個引數就是我們想進行劃分的陣列的名字是什麼,這個根據自己的需求進行定義,最後就是在劃分的過程中的分隔符,這個分隔符指的是第乙個引數的分隔符。

awk 'begin' he

llo需要注意的是,首先在中間的引數是陣列的名字,這個是不需要有引號的,否則報錯,另外n=split("hello",a,""),這樣

n就是陣列的長度,並且陣列的下標是從

1開始的。

2、gsub

gsub(「被替換字串的正則匹配模式」,」用什麼字元創進行替換」,」被替換的字串」)

cat file

hello world hello nginx hello php

hello awk

hi world

下面將文字中的hello全部替換為

linux

awk '' file

3 linux world linux nginx linux php

1 linux awk

0 hi world

解析:gsub返回的是被替換的字串的個數,第一行原來有三個

hello

,所以輸出的是

3,最後將替換後的記錄進行輸出,此外,在

gsub

函式中,需要提供的是三個變數,如果第三個變數不寫的話,那麼第三個引數預設的為

$0,另外

sub函式和

gsub

函式的原理是一樣的,只不過是

sub這是替換本條記錄第一次出現的目標字串,再有就是被替換字串的為止可以也可以是乙個正規表示式,也可以是乙個指定的字串。

3、substr

substr(「源字串」,」開始擷取的為止」,」擷取的長度」)

echo "hello world" | awk ''

e這時候會輸出e,上面的解釋為從

$0擷取,第二個字元開始,擷取的長度是

1,所以就是字元e了。

4、match

match(「字串」,」查詢的正則或者是字串」)

cat file

hello world hello nginx hello php

hello awk

hi world

awk '' file11

10awk '' file190

00分別匹配nginx 和

hello

在文字中出現的為止。

5、index

index(

s,r)返回子串r在

s中的位置,如果

r不存在

s中,那麼返回值為0。

6、tolower(s):將字串

s轉化為小寫,

toupper(s)

:將字串

s轉化為大寫。

7、gensub

gensub(「想要進行替換的字串或者正則」,」替換的字串」,替換第幾個)

cat file

hello world hello nginx hello php

hello awk

hi world

awk '' file

linux world hello nginx hello php

linux awk

hi world

將記錄中第一次出現的hello用

linux

替換掉。

需要注意的是,gensub是不會改變原來的

target

的,什麼意思呢,

sub和

gsub

會替換原來的

target

。也就是說,進行

gensub

之後,如果

print $0

之後,輸出的還是原來的內容,這叫做

target

沒有改變,但是如果利用的是

gsub

或者是sub

函式,那麼輸出

$0就是經過

awk處理的

$0了。

AWK 陣列介紹

awk 可以使用關聯陣列這種資料結構,索引可以是數字或字串。awk關聯陣列也不需要提前宣告其大小,因為它在執行時可以自動的增大或減小。陣列使用的語法格式 array name index valuearray name 陣列的名稱 index 陣列索引 value 陣列中元素所賦予的值 建立陣列 接...

awk時間函式

awk提供了兩個函式來獲取時間和格式化時間戳 systime和strftime。systime函式 systime函式將返回自1970 年1月l日以來經過的時間 按秒計算 格式systime 範例 awk begin 939515282 說明 systime函式的返回值被賦給乙個使用者自定義的變數 ...

awk內建函式

awk的內建函式split允許把乙個字串分隔為單詞並儲存在陣列中。可以自己定義域分隔符或者使用現在fs 域分隔符 的值。split string,array,field separator split string,array 如果第三個引數沒有提供,awk就預設使用當前fs值。time 12 34...