awk基本

awk  精确搜索 逐行处理(处理n次)
 格式1 前置指令 | awk [选项]'[条件]{指令}'
 格式2 awk [选项]'[条件]{指令}'    文件

 指令:print 输出
 选项:-F 定义分隔符
 默认空格 分割列
内置变量 $1  $2 $3...$0 所有列     NR行号    NF列号

 awk '{print $3}' ceshi.txt 
  awk '/the/{print $3}' ceshi.txt 
 awk '/the/{print NR}' ceshi.txt 
  awk '{print NR}' ceshi.txt 
  awk '{print NF}' ceshi.txt 
  awk '{print $0,NR}' ceshi.txt 
输出常量("")F:分隔符 输出内容
awk -F: '{print $1 ,"的解释器是",$7}' user
awk -F: '{print $1,$7}' user
收集网卡流量信息
#!/bin/bash
ifconfig eth0 | awk '/RX p/{print "服务器eth0网卡的接受流量是"$5"字节"}'
ifconfig eth0 | awk '/TX p/{print "服务器eth0网卡的发送流量是"$5"字节"}'

收集根分区剩余容量
df -h | awk '/\/$/{print "根分区剩余容量是"$4}'

awk条件
1、使用正则 ~包含  !~不包含
 awk -F: '$6~/bin/{print}' user   //找第6列包含bin的行
awk -F: '$6!~/bin/{print}' user  //找第6列不包含bin的行
2、数字或字符串
 == 相等    !=  不等   >= 大于等于     >  大于        <= 小于等于  <小于
awk -F: 'NR==1{print}' user    //输出第1行
awk -F: 'NR!=3{print}' user     //输出除了第3行以外的行
awk -F: 'NR<4{print}' user     //输出1~3行
awk -F: '$1=="root"{print}' user   //输出第1列等于root的行
awk -F: '$1~/root/{print}' user   //输出第1列包含root的行
逻辑组合  &&并且 || 或者  输出整行print可省略
 awk -F: '$3<10&&$7~/bash/' /etc/passwd
 awk -F: 'NR>=2&&NR<=6' /etc/passwd
 awk -F: '$1~/root/||$2<=5' /etc/passwd
运算 
awk 'NR%2==0' user    输出偶数行

2、awk处理时机---可以执行额外任务
BEING{    }   执行1次
逐行任务 {   } 执行n次
END   {    }   执行1次
awk -F: 'BEGIN{print "User\tUID\tHome"}{print $1 "\t"$3"\t"$6"\t"}END{print "总计"NR"行"}' user
User    UID    Home
root    0    /root    
bin    1    /bin    
daemon    2    /sbin    
adm    3    /var/adm    
lp    4    /var/spool/lpd    
总计5行

awk 'BEGIN{print "User\tUID\tHome"}'    BEGIN任务
User    UID    Home
awk -F: '{print $1"\t"$3"\t"$6"\t"}' user   逐行任务
root    0    /root    
bin    1    /bin    
daemon    2    /sbin    
adm    3    /var/adm    
lp    4    /var/spool/lpd    
awk 'END{print "总计"NR"行"}' user   END任务
总计5行
统计网站日志访问量
 systemctl restart httpd 开启服务
  curl 192.168.4.7:82 访问
tail -2 /var/log/httpd/access_log 查看日志
awk '{print $1}'/var/log/httpd/access_log

awk数组加for循环实现高级搜索
数组 相当于可以存储多个值的特殊变量
数组名称[下标]=下标对应的值
awk 'BEGIN{a[1]=10;a[2]=20;print a[1]}'
awk 'BEGIN{a[1]=10;a[2]=20;print a[2]}'
awk 'BEGIN{a[1]=10;a[2]=20;print a[1],a[2]}'
数组收集信息
for循环可以循环输出数组下标

awk '{a[$1]++}END{print a["abc"],a["xyz"]}' abc.txt 收集数组的值,END任务输出值

awk '{a[$1]++}END{for(i in a){print i,a[i]}}' abc.txt 循环,数组a的下标与值

awk '{a[$1]++}END{for(i in a){print i,a[i]}}' /var/log/httpd/access_log 查看日志,得到IP来访次数 

awk '{ip[$1]++}END{for(i in ip){print ip[i],i} }' /var/log/httpd/access_log 查看日志中IP出现次数

awk '{ip[$1]++}END{for(i in ip){print ip[i],i} }' /var/log/httpd/access_log | sort -nr   查看日志中IP出现次数,降序排列

测试
for i in {1..100}
> do
> curl 127.0.0.1:82 &> /dev/null
> done
[root@svr7 opt]# awk '{ip[$1]++}END{for(i in ip){print ip[i],i} }' /var/log/httpd/access_log | sort -nr

/var/log/secure  linux系统安全文件 实时更新
awk '/Failed password for root /{print}' /var/log/secure
awk '/Failed password for root /{ip [$11]++}END{for(i in ip){print ip[i],i}}' /var/log/secure

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值