awk分析mysql狀態
阿新 • • 發佈:2018-02-12
tro vip 設計 www. oob details blank 匹配 linux-c
今天是臘月27,明天是臘月28,一到過年,就習慣說農歷,而不說公歷。這兩天挺閑的,就再造一把。
話說Linux處理文本工具有三劍客,awk、grep、sed,其中awk最為厲害,grep也挺是常用。今天就來說一說awk,並結合mysql應用。
1.語法 |
awk ‘{[pattern] action}‘ {filenames}
用法有很多種,但是語法總結可以寫成這樣,分兩個部分:pattern (條件) + action(處理動作)。
pattern表示 awk 在數據中查找的內容,是一些正則表達式或條件判斷,這個選項也可以省略。
action是指在匹配到內容後,要執行的命令。
2.awk原理 |
通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然後執行相應的命令,來處理文本。
具體過程可以用這樣的偽代碼來描述
While(還有下一行) { 1:讀取下一行,並把下一行賦給$0,各列賦給$1,$2...$N變量 2: 用指定的命令來處理該行 }
下面看一個例子:city.txt文本中有5行2列數據
[root@021rjsh216086s ~]# cat city.txt BJ 010 SH 021 TJ 022 HZ 0657 ZZ 0371
執行awk相關命令
[root@021rjsh216086s ~]# awk‘{print $0}‘ city.txt #$0表示一行的所有列 BJ 010 SH 021 TJ 022 HZ 0657 ZZ 0371 [root@021rjsh216086s ~]# awk ‘{print $1}‘ city.txt #$1表示一行的第一列 BJ SH TJ HZ ZZ [root@021rjsh216086s ~]# awk ‘{print $2}‘ city.txt #$2表示一行的第二列 010 021 022 0657 0371
再看第二個例子,city.txt 以豎線為分隔符。想要把數據分開,便用-F參數。
[root@021rjsh216086s ~]# catcity.txt BJ | 010 | a SH | 021 | b TJ | 022 | c HZ | 0657| d ZZ | 0371| e
[root@021rjsh216086s ~]# awk ‘BEGIN{FS="|"} {print $1}‘ city.txt #或 awk -F"|" ‘{print $1}‘ city.txt
BJ
SH
TJ
HZ
ZZ
假如分隔符同時存在多種,豎線,問好,逗號。-F參數可以指定多個。
[root@021rjsh216086s ~]# cat city.txt BJ | 010 ? a SH | 021 ? b TJ | 022 , c HZ | 0657, d ZZ | 0371, e [root@021rjsh216086s ~]# awk -F ‘[|?,]‘ ‘{print $1,$2,$3}‘ city.txt #同時指定三個分隔參數 BJ 010 a SH 021 b TJ 022 c HZ 0657 d ZZ 0371 e
參考文章:
Mysql分析-awk+Threads分析狀態
Linux三劍客之awk命令
Linux awk 命令
AWK程序設計語言
awk分析mysql狀態