awk 是一種處理文字檔案的語言,是乙個強大的文字分析工具。
awk 是以檔案的一行內容為處理單位的。awk讀取一行內容,然後根據指定條件判斷是否處理此行內容,若此行文字符合條件,則按照動作處理文字,否則跳過此行文字,讀取下一行進行判斷。
condition:條件。若此行文字符合該條件,則按照 action 處理此行文字。不新增條件時則處理每一行文字;
action:動作。按照動作處理符合要求的內容。一般用於列印指定的內容資訊;
注意下面的引號為英文的單引號
awk 'condition ' filename
command | awk ' condition '
預設使用空格作為分隔符。
[root@server logs]# echo "aa bb cc dd ee ff" | awk ''
aa[root@server logs]# echo "aa bb l cc dd l ee ff" | awk -f 'l' ''
aa bb
預設是空格和製表符。
$0 表示當前整行內容,$1,$2 表示第乙個字段,第二個字段
[root@localhost zabbix_agentd.d]# echo "aa bb cc dd" | awk ''
aa bb cc dd
[root@localhost zabbix_agentd.d]# echo "aa bb cc dd" | awk ''
aa[root@localhost zabbix_agentd.d]# echo "aa bb cc dd" | awk ''
bb
$nf就代表最後乙個字段,$(nf-1)代表倒數第二個字段
[root@localhost zabbix_agentd.d]# echo "aa bb cc dd" | awk ''
dd[root@localhost zabbix_agentd.d]# echo "aa bb cc dd" | awk ''
cc
列印當前行號和當前文字內容
[root@localhost awk]# cat test.txt
aa ss
dd ff
gg hh
[root@localhost awk]# cat test.txt | awk ''
1) aa ss
2) dd ff
3) gg hh
逗號表示輸出的變數之間用空格分隔;
右括號必需使用 雙引號 才可以原樣輸出
[root@localhost awk]# awk '' test.txt
test.txt 1) aa ss
test.txt 2) dd ff
test.txt 3) gg hh
rs:行分隔符,用於分割每一行,預設是換行符。
ofs:輸出欄位的分隔符,用於列印時分隔字段,預設為空格。
ors:輸出記錄的分隔符,用於列印時分隔記錄,預設為換行符。
ofmt:數字輸出的格式,預設為%.6g。
awk中同時提供了print和printf兩種列印輸出的函式。
print函式,引數可以是變數、數值或者字串。字串必須用雙引號引用,引數用逗號分隔。如果沒有逗號,引數就串聯在一起而無法區分。這裡,逗號的作用與輸出檔案的分隔符的作用是一樣的,只是後者是空格而已。
printf函式,其用法和c語言中printf基本相似,可以格式化字串,輸出複雜時,printf更加好用,**更易懂。
toupper():字元轉為大寫。
tolower():字元轉為小寫。
length():返回字串長度。
substr():返回子字串。
substr($1,2):返回第乙個字段,從第2個字元開始一直到結束。
substr($1,2,3):返回第乙個字段,從第2個字元開始開始後的3個字元。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():隨機數。
[root@localhost awk]# echo "aa bb cc dd ee ff" | awk ''
aa[root@localhost awk]# echo "aa bb cc dd ee ff" | awk ''
bb[root@localhost awk]# echo "aa bb cc dd ee ff" | awk ''
2[root@localhost awk]# echo "asdfghj" | awk ''
sdf
awk 允許指定輸出條件,只輸出符合條件的行。
awk ' 條件 ' 檔名
條件有以下幾種:
[root@localhost awk]# cat exp.txt
/root/home/chenfan
/root/home/jhhuang
[root@localhost awk]# cat exp.txt | awk '/stsvc/ ' 包含 stsvc 的行
特殊字元需要轉義
[root@localhost awk]# cat exp.txt | awk '/stsvc\/fms/ ' 包含 stsvc/fms 的行
[root@localhost awk]# cat exp.txt | awk 'nr==2 ' 等於第二行某個字段等於具體值[root@localhost awk]# cat exp.txt | awk 'nr>4 ' 大於第四行
/root/home/jhhuang
[root@localhost awk]# cat exp.txt | awk 'nr%2==1 ' 奇數行
/root/home/jhhuang
[root@localhost awk]# cat test.txt
aa ss
dd ff
gg hh
[root@localhost awk]# cat test.txt | awk ' $2=="ff" '
dd ff
[root@localhost awk]# echo "aa ss dd" | awk ''
aa ss dd
[root@localhost awk]# echo "aa ss dds" | awk ''
nothing
awk分析工具和sort、uniq等命令結合可以用於統計各種各樣的資訊
sort可針對文字檔案的內容,以行為單位來排序
常用引數
-b 忽略每行前面開始出的空格字元。
-c 檢查檔案是否已經按照順序排序。
-d 排序時,處理英文本母、數字及空格字元外,忽略其他的字元。
-f 排序時,將小寫字母視為大寫字母。
-i 排序時,除了040至176之間的ascii字元外,忽略其他的字元。
-m 將幾個排序好的檔案進行合併。
-m 將前面3個字母依照月份的縮寫進行排序。
-n 依照數值的大小排序。
-u 意味著是唯一的(unique),輸出的結果是去完重了的。
-o《輸出檔案》 將排序後的結果存入指定的檔案。
-r 以相反的順序來排序。
uniq 命令用於檢查及刪除文字檔案中重複出現的行列,一般與 sort 命令結合使用。
常用引數
-c或--count 在每列旁邊顯示該行重複出現的次數。
-d或--repeated 僅顯示重複出現的行列。
-f《字段》或--skip-fields=《字段》 忽略比較指定的字段。
-s《字元位置》或--skip-chars=《字元位置》 忽略比較指定的字元。
-u或--unique 僅顯示出一次的行列。
-w《字元位置》或--check-chars=《字元位置》 指定要比較的字元。
日誌基本資訊
統計命令:cat server1.log | awk '' | uniq -c | sort -rn | head -10
[root@server logs]# cat server1.log | awk '' | uniq -c | sort -rn | head -10
94 2020-07-26 12:11:22
94 2020-07-26 12:10:36
94 2020-07-26 11:56:27
94 2020-07-26 11:55:51
94 2020-07-26 11:54:17
94 2020-07-26 11:53:56
94 2020-07-26 11:49:34
93 2020-07-26 12:12:09
93 2020-07-26 12:12:08
93 2020-07-26 12:12:07
文字分析awk
awk awk是乙個強大的文字分析工具。相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,空格,製表符 為預設分隔符將每行切片,切開的部分再進行各種分析處理。awk f 支援自定義分隔符 支援正規表示式匹配 支援自定義變數,陣列 ...
awk文字分析工具
awk命令,可以通過鍵入指令碼名稱來呼叫 首行為 bin awk 這樣就可以編寫awk的指令碼 f 網域名稱分隔符,預設為空格 常用 awk f print 1 file name 0 是一整行 1 位域分隔符的後的第乙個域,以此類推 簡單的呼叫方式 注意 1變數不要被引號包裹 begin 表示在未...
awk文字分析工具
usage awk option program file awk option f progfile file optin f fs 指定輸入分隔符,fs可是字串或者正規表示式 v var value 賦值給var,將外部變數傳給awk f script 從外部指令碼讀取awk命令 awk beg...