设为首页 收藏本站
查看: 833|回复: 0

shell-awk高级应用

[复制链接]

尚未签到

发表于 2018-8-26 07:30:27 | 显示全部楼层 |阅读模式
  awk
  一、awk简介
  脚本语言
  变量    .....    流程控制   数组  函数
  主要使用awk做数据统计
  1 统计系统内建用户个数、外建用户个数
  2 统计网站服务器 当天的访问量   access_log
  3 每周一给邮箱使用空间最大的前10个邮箱帐号发提醒邮件
  4 把当前系统10分钟内cpu使用率最高的前10个进程名输出
  在shell脚本里
  使用awk获取数据给shell程序处理。
  每5分钟检查一下当前系统根分区的使用量,根分区的空闲空间小        于10G时,向当前系统所有终端发送报警信息
  ----------------------------------------------------------------------
  awk语法格式   (rpm -q   gawk)
  awk      '动作'    文件列表
  awk   选项    '条件动作'    文件列表
  命令  |   awk   选项    '条件动作'
  ---------------------------------------------------------------------
  awk 执行过程?
  以行为处理单位,逐行处理文件中的所有行,输出当前行的处理结果后自动处理下一行,直到把所有行处理完为止。
  ----------------------------------------------------------------------
  选项?
  -F  "符号"    指定列的分割符号 awk默认使用空格或\tab作为列的分隔符
  ----------------------------------------------------------------------
  awk变量的使用 (内置变量   自定义变量     调用shell  )
  1、 内置变量
  $0  当前读入的整行文本内容
  FNR   保存当前处理行在原文本内的序号(行号)
  NR   记录当前已读入行的数量(行数)
  FILENAME  当前处理文件的文件名
  NF    记录当前处理行的字段个数(列数)域$n    指定分隔的第n个字段,如$1、$3分别表示第1、第3列
  FS     保存或设置字段分隔符   空格  \tab
  awk '{print FNR}' a.txt
  awk '{print NR,FNR}' a.txt
  awk '{print FILENAME}' a.txt  b.txt
  head /etc/passwd | awk -F ":" '{print $1}'
  head /etc/passwd | awk -F ":" '{print $1,$3}'
  awk '{print $0}' a.txt
  awk '{print "abc"}' a.txt
  df -h | grep /boot$ | awk '{print $1}'
  echo  9G | awk -F "[.G]" '{print $1}'
  echo  3.5G | awk -F "[.G]" '{print $1}'
  2 自定义变量
  变量名=值
  awk '{i=101;name="lucy";print     i,name}' a.txt
  awk '{i=101;name="lucy";print “i,name”}' a000.txt
  3 awk调用shell变量
  36  name1=lucy  name2=tom
  37  echo $name1 $name2
  38  awk -v x=$name1 -v y=$name2 '{print x,y}' a.txt
  [root@A ~]# x=203
  [root@A ~]# awk  '{print '$x' }' a.txt
  203
  203
  203
  [root@A ~]#
  [root@A ~]# awk -v y=$x '{print  y }' a.txt   调用变量时-v *=$*
  203
  203
  203
  [root@A ~]#
  ENVIRON   调用Shell环境变量,格式:ENVIRON["变量名"]
  awk -v y=$HOSTNAME '{print y}' a.txt
  echo $USER   $HOSTNAME
  awk  '{print ENVIRON["USER"]  }' a.txt
  awk  '{print ENVIRON["HOSTNAME"]  }' a.txt
  ------------------------------------------------------------------
  在执行sed命令时,调用shell自定义变量
  45  sed -n '1,3p' a.txt
  46  x=1 y=3
  47  echo $x $y
  49  sed -n ' '$x','$y'p ' a.txt
  ----------------------------------------------------------------------
  awk处理数据的顺序?
  awk   ''  a.txt
  awk   ' {  }  '  a.txt
  awk   'BEGIN{  }  {  }  '  a.txt
  awk   '{  }  END{  }'  a.txt
  awk   'BEGIN{  }  {  }  END{  }'  a.txt
  BEGIN{   }  行前处理
  做数据的初始化定义
  82  awk -F ":" '{print $1}' a.txt
  83  awk 'BEGIN{FS=":"}{print $1}' a.txt
  {    }            行处理
  对每一行执行的命令   多个命令用;间隔
  END{   }     行后处理
  把文件中所有行都处理完后,执行的命令
  适合做数据的总结行输出
  71  awk '{print $0}END{print $0}' a.txt
  73  awk 'END{print $0}' /etc/passwd
  74  useradd bob
  75  awk 'END{print $0}' /etc/passwd
  77  awk '{print FNR,$0}' a.txt
  78  awk 'BEGIN{print FNR}{print FNR}END{print FNR}' a.txt
  awk 'END{print "文件"FILENAME"的行数是"NR"行"}' /etc/passwd
  awk 'BEGIN{FS=":";print "user\tuid\thome"}{print $1"\t",$3"\t",$6}END{print  "sum lines is  "NR}'  a.txt
  awk -F ":" '{print $1"\t",$3"\t",$6}END{print  "sum lines is  "NR}'  a.txt   | sed  '1iuser  uid   home'
  -------------------------------------------------------------------
  awk条件的表示方式?
  awk  '{print  $0}'  a.txt
  awk  '条件{print  $0}'  a.txt
  数值比较
  num1   符号   num2
  ==  等于    != 不等于
  > 大于      >= 大于或等于
  < 小于      a.txt
  1004  awk  '{exit}' a.txt
  1005  awk  'FNR==3{exit}{print FNR,$0}' a.txt
  1006  awk  'FNR==3{next}{print FNR,$0}' a.txt
  1007  awk  '{next}{print FNR,$0}' a.txt
  1008  awk  '{print FNR,$0}{next}' a.txt
  --------------------------------------------------------------
  [root@A ~]# cat c.txt
  eth0      Link encap:Ethernet  HWaddr 00:0C:29:B6:48:A6
  encap:Ethernet  HWaddr 00:0C:29:B6:48:A6
  [root@A ~]#
  awk      'NF

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-556543-1-1.html 上篇帖子: shell几种循环 下篇帖子: shell编程(十三) --- while循环
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表