天天看点

运维的shell小编(6)

 第六章:awk编程

Grep主要是作为过滤工具使用,sed是一个文本编辑sed更多的是匹配,进行替换和删除。 ,awk是一个报告生成语句,awk编程是shell脚本的常用的命令。

Awk格式:

awk '

BEGIN{ print "start"} 

pattern { commands } 

END{ print "end"}'

file 

Awk主要作用是对文件进行切片,例1:我们通过action输出print $1第一个字段。

<a href="http://blog.51cto.com/attachment/201209/234455128.png" target="_blank"></a>

Awk默认的分隔符是空格,我们可以使用-F:参数指定字段分隔符

<a href="http://blog.51cto.com/attachment/201209/234516245.png" target="_blank"></a>

我们可以使用$NF,显示一行最后一个字段

<a href="http://blog.51cto.com/attachment/201209/234526312.png" target="_blank"></a>

我们可以-v参数自定义变量

<a href="http://blog.51cto.com/attachment/201209/234540785.png" target="_blank"></a>

输出时我们需要使用,分开不同字段,如果要指定字段分隔符可以使用,-v OFS“分隔符”指定分隔符

<a href="http://blog.51cto.com/attachment/201209/234551410.png" target="_blank"></a>

输出4-6行

<a href="http://blog.51cto.com/attachment/201209/234601448.png" target="_blank"></a>

输出时print和printf是有很大不同的,printf是可以定义格式的,默认不换行,并右对齐,-左对齐,定义格式之间不用分隔符

常用格式:\n换行,%s显示字符串,%d十进制数,%e科学计数显示值……

<a href="http://blog.51cto.com/attachment/201209/234629338.png" target="_blank"></a>

Awk -F: '$1 ~ /^root/ {print $1,$2}' /etc/passwd  //$1 ~/匹配/是指匹配,后面的跟的是正则匹配root开头的字符。

<a href="http://blog.51cto.com/attachment/201209/234651365.png" target="_blank"></a>

任意行匹配bash的输出

<a href="http://blog.51cto.com/attachment/201209/234701988.png" target="_blank"></a>

判断在输出

<a href="http://blog.51cto.com/attachment/201209/234711749.png" target="_blank"></a>

输出字段加标题,我们可以使用BEGIN{print  “usr   id”}指定

<a href="http://blog.51cto.com/attachment/201209/234721925.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201209/234728232.png" target="_blank"></a>

Begin也可以用来赋值

<a href="http://blog.51cto.com/attachment/201209/234738810.png" target="_blank"></a>

Awk也可以接一些逻辑词if for等

<a href="http://blog.51cto.com/attachment/201209/234750744.png" target="_blank"></a>

对每个字段进行切片

<a href="http://blog.51cto.com/attachment/201209/234803723.png" target="_blank"></a>

显示所有偶数字段

<a href="http://blog.51cto.com/attachment/201209/234814482.png" target="_blank"></a>

Begin赋值,如果要引用字符串要加引号

<a href="http://blog.51cto.com/attachment/201209/234825409.png" target="_blank"></a>

介绍一个重要应用,如awk中b in a 表示b记录a的下标,a[b]则为依次输出a的值。

<a href="http://blog.51cto.com/attachment/201209/234836321.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201209/234847151.png" target="_blank"></a>

对日志访问ip进行统计

<a href="http://blog.51cto.com/attachment/201209/234857339.png" target="_blank"></a>

本文转自zsaisai 51CTO博客,原文链接:http://blog.51cto.com/3402313/1009541