Linux awk命令的使用

2021-07-24 17:05:05 字數 3357 閱讀 7122

awk是linux非常強大的報告生成工具

基本使用格式:awk [options]   'script'   file

awk[options]     '/pattern/'   file

option: -f 切割符  $0整行 $1第一列 $2第二列....

位址定界:

/pattern1/,/pattern2/ 兩個正則之間的範圍

/pattern/所有被匹配的行

表示式    >,>=,<,<=,==,!=,~(匹配正則)

begin{}:執行前操作

end{}:收尾操作

行分隔符(輸入,輸出)

字段分隔符(輸入,輸出)

awk的內建變數:

nf:最後乙個字段

fs:指定輸入分割符 begin中定義預設為空白

rs: record separator,輸入文字資訊所使用的換行符;

ofs:指定輸出分隔符 begin中定義預設空白

ors:output row separator:

nr: the number of input records,awk命令所處理的記錄數;如果有多個檔案,這個數目會把處理的多個檔案中行統一計數;

nf:number of field,當前記錄的field個數;

fnr: 與nr不同的是,fnr用於記錄正處理的行是當前這一檔案中被總共處理的行數;

argv: 陣列,儲存命令列本身這個字串,如awk '' a.txt b.txt這個命令中,argv[0]儲存awk,argv[1]儲存a.txt;

argc: awk命令的引數的個數;

filename: awk命令所處理的檔案的名稱;在命令中獲取當前檔名

environ:當前shell環境變數及其值的關聯陣列

awk -v 賦值變數

例: awk -v num=1 -v num=2 'begin'

printf命令的使用格式:

printf format, item1, item2

其與print命令的最大不同是,printf需要指定format

format用於指定後面的每個item的輸出格式;

printf語句不會自動列印換行符;\n

format格式的指示符都以%開頭,後跟乙個字元;如下:

%c: 顯示字元的ascii碼;

%d, %i:十進位制整數;

%e, %e:科學計數法顯示數值;

%f: 顯示浮點數;

%g, %g: 以科學計數法的格式或浮點數的格式顯示數值;

%s: 顯示字串;

%u: 無符號整數;

%%: 顯示%自身;

修飾符:

n: 顯示寬度;

-: 左對齊;

+:顯示數值符號;

例:# awk -f: '' /etc/passwd

操作符-x: 負值

+x: 轉換為數值;

x^y: 

x**y: 次方

x*y: 乘法

x/y:除法

x+y:

x-y:

x%y:賦值

=+=-=*=

/=%=

^=**=

++--

控制語句:

if-else

語法:if (condition) else

# awk ' else }' /etc/passwd

awk -f: '' /etc/passwd

awk -f: '' /etc/passwd

awk -f: -v sum=0 'end' /etc/passwd

while

語法: while (condition)

awk -f: '}' /etc/passwd

awk -f: '; i++ }}' /etc/passwd

do-while 至少執行一次迴圈體,不管條件滿足與否

語法: do while (condition)

awk -f: 'while(i<=3)}' /etc/passwd

awk -f: 'while(i>4)}' /etc/passwd

for語法: for ( variable assignment; condition; iteration process)

awk -f: '' /etc/passwd

awk -f: '}}' /etc/passwd

for in

語法: for (i in array)

awk -f: '$nf!~/^$/end}' /etc/passwd

case

語法:switch (expression)

break 和 continue

常用於迴圈或case語句中

next

提前結束對本行文字的處理,並接著處理下一行;例如,下面的命令將顯示其id號為奇數的使用者:

# awk -f: '' /etc/passwd

陣列array[index-expression]

與php c語法類似 索引與關聯陣列

要遍歷陣列中的每乙個元素,需要使用如下的特殊結構:

for (var in array)

其中,var用於引用陣列下標,而不是元素值;

例:netstat -ant | awk '/^tcp/ end '

每出現一被/^tcp/模式匹配到的行,陣列s[$nf]就加1,nf為當前匹配到的行的最後乙個字段,此處用其值做為陣列s的元素索引;

用法與上乙個例子相同,用於統計某日誌檔案中ip地的訪問量

刪除陣列變數

從關係陣列中刪除陣列索引需要使用delete命令。使用格式為:

delete  array[index]

awk的內建函式

split(string, array [, fieldsep [, seps ] ])

功能:將string表示的字串以fieldsep為分隔符進行分隔,並將分隔後的結果儲存至array為名的陣列中;陣列下標為從1開始的序列;

length([string])

功能:返回string字串中字元的個數;

substr(string, start [, length])

功能:取string字串中的子串,從start開始,取length個;start從1開始計數;

system(command)

功能:執行系統command並將結果返回至awk命令

systime()

功能:取系統當前時間

tolower(s)

功能:將s中的所有字母轉為小寫

toupper(s)

功能:將s中的所有字母轉為大寫

LINUX awk命令使用簡介

awk是一種處理文字檔案的語言,是乙個強大的文字分析工具。這裡只介紹平時使用最多的幾種用法。awk命令是逐行來進行的。1.awk 123.txt 將123.txt中的內容按行讀取並用 預設的空格來分隔,取第1段。2.awk f 123.txt 將123.txt中的內容按行讀取並用 分隔,取第1段。3...

使用案例 Linux awk命令常見使用案例

1.awk簡介 awk是乙個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。awk有3個不同版本 awk nawk和gawk,未作特別說明,一般指g...

Linux awk命令詳解

3.awk的執行過程 1 awk script的組成 awk script可以由一條或多條awk cmd組成,兩條awk cmd之間一般以newline分隔 awk cmd由兩部分組成 awk pattern awk script可以被分成多行書寫,必須確保整個awk script被單引號括起來。2...