linux學習三 awk文字分析工具

2021-10-08 14:29:52 字數 4600 閱讀 8941

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