ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux:shell脚本awk

Linux:shell脚本awk

原创 Linux操作系统 作者:果果的空间 时间:2013-08-14 17:54:14 0 删除 编辑
awk的使用, 既可以处理行, 也可以处理列
awk 是一种用于处理文本的编程语言工具
UNIX和Linux功能最强大的数据处理引擎
可以在匹配的行上执行特殊的操作
Shell中最常用于截取文本中某一段数据

awk用于您创建简短的程序,这些程序读取输入文件\为数据排序\处理数据\对输入执行计算以及生成报表,还有其他功能。。。

awk `{pattern+action}` {filename}
pattern 表示awk在数据中查找的内容
action 是在找到匹配内容时所执行的一系列命令
{} 表示不需要在程序中是始终楚翔

使用awk常用到的参数
 ``反引号, 用来屏蔽shell
-F 分隔符前使用
-f 执行awk的shell
awk -F : `   `
awk -F : -f aaa


sed更改文本的一行比较方便,但是如果更改整个文本,就复杂了,使用awk
chkconfig --list 查看所有的服务在哪个地方打开或关闭, $N  代表第N列
chkconfig --list | awk '$1="httpd" {print $5}'  如果没有这个服务的时候,就不会显示出来
chkconfig --list |head
chkconfig --list | awk '$1="yum-updatesd" {print $5}'  有这个服务的时候,才会显示出来
chkconfig --list | awk '$1="xfs" {print $5}'  有这个服务的时候,才会显示出来

可以写入脚本
if [   'chkconfig --list | awk '$1="xfs" {print $5}' ` = "3:on"    ] ; then echo ok ; fi
注意:$1表示的是第一列, $2表示第二列, []必须要有空格,否则报错 bash: [:missing `]
print为打印命令,可以打印各种符号
如:
chkconfig --list |head
chkconfig --list |awk '{print $1 " on level "  $5}'
chkconfig --list |awk '{print $1 " on level "  $5}' |head
打印第一列的服务,在level3的情况。。。NetworkManager在level3的时候是on
$0 代表整个这一行

chkconfig --list |awk 'BEGIN {iii=0} { if ($5=="3:on") iii+=1 }'  END {print iii}  统计level5==3:on的服务有多少个, iii=0 是定义变量
chkconfig --list |awk 'BEGIN {iii=0} { if ($5=="3:on") iii=iii+1 }'  END {print iii}  统计level5==3:on的服务有多少个, iii=0 是定义变量
BEGIN表示服务开始运行

统计下/etc/passwd下使用bash的用户有多少个??使用指定分隔符的方法来实现, 使用参数-F 
awk -F: 'BEGIN {iii=0} { if ($7=="/bin/bash") iii=iii+1 } END {print iii}'  < /etc/passwd   其中-F : 代表以冒号作为分隔符

awk -F : '{print $1 " UID is  " $3}'  /etc/passwd  打印出第一列的UID是第三列的值
vi aaa
BEGIN { iii=0 }
{ if ($5=="3:on") iii+=1  }
END {print iii}

执行程序:chkconfig --list |awk -f aaa
注意: 如果把END和{}分开,就会报错, END blocks must have an action part


何时使用awk 
1.从大量的原始数据中产生报告
2.从其他程序的输出中总结信息
3.当你需要一个又小又快的文本处理程序的时候

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29056818/viewspace-768527/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Linux:shell脚本sed
请登录后发表评论 登录
全部评论

注册时间:2013-07-18

  • 博文量
    60
  • 访问量
    115848