天天看点

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,如需转载请自行联系原作者