1. 程式人生 > >awk分析mysql狀態

awk分析mysql狀態

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 ~]# cat
city.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狀態