码迷,mamicode.com
首页 > 其他好文 > 详细

AWK续

时间:2018-02-01 13:08:22      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:begin   一个   /etc   编辑   ash   awk   变量   print   while   

Awk 流程控制
for
if
while 语句
Awk 支持语句作为指令,这些指令必须要放在 { } 里面
单分支:if (条件){编辑指令}
[root@svr5 ~]# awk -F: ‘BEGIN{i=0}{if($3<=500){i++}}END{print i}‘ /etc/passwd
31
类似于 awk -F: ‘{if($3<=500)print $3}‘ /etc/passwd |wc -l
双分支结构:if (条件){编辑指令}
else {编辑指令 2}
awk -F: ‘BEGIN{i=0;j=0}{if($3<=500){i++}else{ j++}}END{print i,j}‘ /etc/passwd
BEGIN{i=0;j=0}可以省略,因为默认从 0 开始
多分支结构:if (条件){编辑指令}
else {编辑指令 2}
else {编辑指令 3}
[root@svr5 ~]# awk -F: ‘BEGIN{i=0;j=0;k=0}{if($7~/bash$/){i++}\
else if($7~/nologin$/){ j++}else{k++}}END{print i,j,k}‘ /etc/passwd
while 循环求词频 :在某个文档中,某个词出现的频率
[root@ Shell ~]# awk -F: ‘{i=1;while(i<=NF){if($i~/root/){x++};i++}} END{print
x}‘ /etc/passwd
脚本写的格式为
i=1
While (i<=NF){
If ($i~/root/)
{x++}
i++}
Awk 数组
统计任何东西出现多少次
Awk ‘X[$1]++ END {print}’
[root@room8pc01]# awk ‘{IP[$1]++}END{for(i in IP){print IP[i],i}}‘
/var/log/httpd/access_log | awk ‘$1>10{print $2}‘
[$1]为数组的下标,是个变量,每次读取的时候读取每行的第一列,如果是$2,每次读
取就读取第二列
(i in IP )
for 循环的是 IP 下标,在到 END 这一步,整体循环已经结束,IP 根据
IP 的下标来确定,每个 IP 出现多少次,然后输出
定义数组 :awk ‘BEGINZ{name[0]="jim";name[1]="tom"}‘
调用数组:awk
‘{print name[0],name[1]}‘
awk中的数组与shell脚本中的数组,不是一个概念!!

AWK续

标签:begin   一个   /etc   编辑   ash   awk   变量   print   while   

原文地址:http://blog.51cto.com/13587255/2067676

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!