AWK 常用方法

2021-09-12 02:18:31 字數 2148 閱讀 1058

工作原理:逐行讀入,以空格為預設分隔符將每行切片,切開的部分再進行分析處理

基本用法

awk  'pattern '  filenames

pattern:正規表示式

action:執行的命令

命令列:awk [-f flag]  'commands'  filenames

file.txt 檔案內容如下

root:x:0:0:root:/root:/usr/bin/zsh

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

sys:x:3:3:sys:/dev:/usr/sbin/nologin

sync:x:4:65534:sync:/bin:/bin/sync

例如 awk -f ':' '' file.txt

root

daemon

binsys

sync

以:分割file.txt檔案內容,輸出第乙個字段內容。-f 指定引數作為分隔符,多個分割符用 |,例如-f ",|#";-f ",|#+",+表示乙個或多個#,$0是整行輸出,$1是第乙個字段,以此類推

$+n:表示第n個字段

$+nf:表示當前行有多少個字段,所以$nf表示最後乙個字段,$(nf-1)表示倒數第二個字段

nr:表示當前處理的是第幾行,例如 '',列印行數

awk 函式

1.算術函式:

int(x) 返回x的整數部分的值,值不會四捨五入,只是取整

sqrt(x) 返回x的平方根

rand() 返回偽隨機數r,其中0<=r<1,(偽隨機數指返回的值都是上一次返回的同乙個隨機數)

srand(x) 建立rand()新的種子數,如果沒有指定就用當天的時間(使用srand()可以使得rand()返回不同的隨機數)

例子:rand()產生乙個隨機數,通過srand()產生新的種子數,然後再差生乙個隨機數

awk 'begin'

2.字串函式:

sub("要替換的字串","替換後的字串值"):替換匹配到的第乙個文字

echo "hello world world" | awk ''

gsub("要替換的字串","替換後的字串值" ):開啟全域性替換,替換文字中所有匹配到的字串

echo "hello world world" | awk ''

自定義函式:

function 函式名(引數1,引數2,...)

例子:求和

awk 'function sum(a,b)begin'

注意:函式必須寫在begin{}{}end{}的花括號之外的地方,不能放在任何{}內,否則會報錯`return' used outside function context

awk陣列類似於python的字典,使用的是鍵值

a[1] = "hello"

a["name"] = "hello"

1和name是key,key可以是數字也可以是字串,hello是value

陣列元素的刪除:delete a["name"]

192.168.3.2

192.168.3.2

192.168.3.3

192.168.3.4

a[$1]++解釋:例子:awk 'end'

awk是逐行讀取的,讀取第一行時,a[$1]替換為a[192.168.3.2]++,此時a[192.168.3.2]值是未定義的,但是後面跟了運算子++,awk會自動把0賦值給a[192.168.3.2],然後做++運算,此時得到的值為1,接著讀取第二行a[192.168.3.2],此時a[192.168.3.2]經過上次運算值為1,這裡再做一次++運算,即1+1,a[192.168.3.2]值變為2,繼續讀取下一行直到檔案末尾,則陣列a裡面的key是$1,value是$1在檔案出現的次數,也就是key出現的次數

awk不能直接修改原始檔,可以通過重導向輸出結果來修改原檔案。>(全部覆蓋檔案內容)或》(追加到檔案)

awk '/^root/' passwd

注意:重導向輸出的檔名要用雙引號括起來,否則會報錯 

常用awk命令

awk 用法 awk pattern 變數名 含義 argc 命令列變元個數 argv 命令列變元陣列 filename 當前輸入檔名 fnr 當前檔案中的記錄號 fs 輸入域分隔符,預設為乙個空格 rs 輸入記錄分隔符 nf 當前記錄裡域個數 nr 到目前為止記錄數 ofs 輸出域分隔符 ors ...

常用awk指令碼

begin else if 2 2 end 說明 按照某列的值進行分組求和。注意 awk指令碼中中間 塊本身就是是對檔案中每行都進行處理,需要使用while i此檔案命名為abc.awk 則執行方式是awk f abc.awk data 如果awk檔案不複雜,建議直接用awk命令列執行,如 awk ...

常用awk命令

awk 用法 awk pattern 變數名 含義 argc 命令列變元個數 ar 命令列變元陣列 filename 當前輸入檔名 fnr 當前檔案中的記錄號 fs 輸入域分隔符,預設為乙個空格 rs 輸入記錄分隔符 nf 當前記錄裡域個數 nr 到目前為止記錄數 ofs 輸出域分隔符 ors 輸出...