天天看點

shell之awk 記錄

給下面的字元中加上""号

cat xx.txt 

原始

master

1.8M

awk '{print "\""$0"\""}' xx.txt

"原始"

"master"

"1.8M"

或者

sed 's/^/\"/;s/$/\"/' xx.txt 

都可以實作

通過awk同時使用多個分隔符,然後通過正則比對多個分隔符的方法來實作:

[root@oldboy ~]# ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}'

10.0.0.185

我們來說明下這個簡單易用的好辦法:

提示:本題NR是行号,分隔符+号比對,[]裡一個或多個任意一個分隔符,這裡就是比對一個或多個冒号或空格。

1)awk -F 後面跟分隔符‘[空格:]+’,其中[空格:]多分隔符寫法,意思是以空格或冒号做分隔,後面的"+"号是正規表達式,意思是比對前面空格或冒号,兩者之一的1個或1個以上。

2)NR==2和sed -n "2p",相當,意思都是選擇第幾行,例:

[root@oldboy ~]# ifconfig eth0|awk NR==2

          inet addr:10.0.0.185  Bcast:10.0.0.255  Mask:255.255.255.0

3)指定awk -F '[ :]+'分隔符後,不同字元串被分隔的列依次為:

inet

addr

  Bcast:10.0.0.255  Mask:255.255.255.0

第一列

第二列

第三列

第四列

  後面忽略不計。

4)整個答案awk部分意思是,通過NR==2取出第二行,然後,通過-F '[-:]+多分隔符正則比對,然後通過{print $4}列印出第四列 !謝謝楊瑞同學的答案啊, 懶得寫了,是以讓你總結下。嘿嘿,看到後别怪老師啊。

5)掌握了理論要去實踐驗證才是科學嚴謹的學習态度,好,來幾個例子實踐說話吧。

[root@oldboy ~]# echo ---1:----2|awk -F '[-:]+' '{print $2}'     

1

[root@oldboy ~]# echo ---1:----2|awk -F '[-:]+' '{print $3}'     

2

[root@oldboy ~]# echo ---1:::::2|awk -F '[-:]+' '{print $3}'    

生産實戰案例):監控MySQL主從同步是否異常,如果異常,則發送短信或者郵件給管理者。提示:如果沒主從同步環境,可以用下面文本放到檔案裡讀取來模拟:

階段1:開發一個守護程序腳本每30秒實作檢測一次。

階段2:如果同步出現如下錯誤号(1158,1159,1008,1007,1062),則跳過錯誤。

階段3:請使用數組技術實作上述腳本(擷取主從判斷及錯誤号部分)

<code>[root@oldboy~]</code><code># mysql -uroot -p'oldboy' -S /data/3307/mysql.sock -e "show slavestatus\G;"</code>

<code>*************************** 1. row ***************************</code>

<code>               </code><code>Slave_IO_State:Waiting </code><code>for</code> <code>master to send event</code>

<code>                  </code><code>Master_Host:10.0.0.179   </code><code>#目前的mysql master伺服器主機</code>

<code>                  </code><code>Master_User: rep</code>

<code>                  </code><code>Master_Port: 3306</code>

<code>                </code><code>Connect_Retry: 60</code>

<code>              </code><code>Master_Log_File:mysql-bin.000013</code>

<code>         </code><code>Read_Master_Log_Pos: 502547</code>

<code>               </code><code>Relay_Log_File:relay-bin.000013</code>

<code>                </code><code>Relay_Log_Pos:251</code>

<code>        </code><code>Relay_Master_Log_File:mysql-bin.000013</code>

<code>             </code><code>Slave_IO_Running:Yes</code>

<code>           </code><code>Slave_SQL_Running: Yes</code>

<code>              </code><code>Replicate_Do_DB: </code>

<code>         </code><code>Replicate_Ignore_DB: mysql</code>

<code>          </code><code>Replicate_Do_Table: </code>

<code>      </code><code>Replicate_Ignore_Table: </code>

<code>     </code><code>Replicate_Wild_Do_Table: </code>

<code> </code><code>Replicate_Wild_Ignore_Table: </code>

<code>                   </code><code>Last_Errno: 0</code>

<code>                   </code><code>Last_Error: </code>

<code>                 </code><code>Skip_Counter: 0</code>

<code>         </code><code>Exec_Master_Log_Pos: 502547</code>

<code>              </code><code>Relay_Log_Space:502986</code>

<code>              </code><code>Until_Condition:None</code>

<code>               </code><code>Until_Log_File: </code>

<code>                </code><code>Until_Log_Pos: 0</code>

<code>          </code><code>Master_SSL_Allowed: No</code>

<code>          </code><code>Master_SSL_CA_File: </code>

<code>          </code><code>Master_SSL_CA_Path: </code>

<code>              </code><code>Master_SSL_Cert: </code>

<code>           </code><code>Master_SSL_Cipher: </code>

<code>               </code><code>Master_SSL_Key: </code>

<code>       </code><code>Seconds_Behind_Master: 0   </code><code>#和主庫比同步延遲的秒數,這個參數很重要</code>

<code>Master_SSL_Verify_Server_Cert: No</code>

<code>                </code><code>Last_IO_Errno: 0</code>

<code>                </code><code>Last_IO_Error: </code>

<code>               </code><code>Last_SQL_Errno: 0</code>

<code>               </code><code>Last_SQL_Error:</code>

<code></code>

本文轉自 a120518129 51CTO部落格,原文連結:http://blog.51cto.com/silencezone/1874024,如需轉載請自行聯系原作者