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...