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

Shell脚本之awk文本编辑器语法(一)

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2018-8-25 07:55:45 | 显示全部楼层 |阅读模式
AWK  ——是一种用于处理文本的编程语言工具。  英文原义:Aho、Weinberger、Kernighan
  中文释义:三位创造者Aho、Weinberger和Kernighan统称
  AWK 在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法。最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
  awk 之所以成为一种优秀的程序设计语言的原因之一是内置函数的使用,awk定义并支持了一系列的内置函数,由于这些函数的使用,使得awk提供的功能更为完善和强大。
  常用语法:
  awk    [options]    'commands'        testfiles
  options选项
  -F    定义字段分隔符,默认分隔符为连续空格或制表符
  用$1,$2,$3等顺序表示files中每行以间隔符号分隔的各列不同域
  -v    定义变更并赋值,也可以借用次方式从shell变量中引入变量
  使用示例:
  [root@localhost test]# awk -F":" '{print $1,$7}' testfile
  以冒号作为分隔符,打印第1和第7个字段
  [root@localhost test]# awk -F"[:/]" '{print $1,$7}' testfile
  以冒号或斜杠 / 作为分隔符,打印第1第7个字段
  [root@localhost test]# awk -F":/" '{print $1,$7}' testfile
  以冒号加斜杠 “:/”整体作为分隔符
  -----------------------------------------------------------
  command
  读前处理    行处理        读后处理
  1、读前处理    BEGIN{awk_cmd1;awk_cmd2;}
  2、行处理:定址    命令
  定址方法:正则,变量,比较,关系运算
  正则需要用 / / 包裹起来
  常用正则:
  ^    行首                $    行尾
  .    除了换行符以外的任意单个字符
  *    前导字符的零个或多个
  .*    所有字符
  []    字符组内的任一字符
  [^]    对字符组内的每个字符取反(不匹配字符组内的每个字符)
  ^[^]    非字符组内的字符开头的行
  [a-z] 小写字母
  [A-Z] 大写字母
  [a-Z] 小写和大写字母
  [0-9] 数字
  \<    单词头,以空格或特殊字符做分隔,连续的字符串被当做单词
  \>    单词尾
  扩展正则
  ?         前导字符零个或一个
  +         前导字符一个或多个
  abc|def         abc或def
  a(bc|de)f         abcf 或 adef
  x\{m\}           x出现m次
  x\{m,\}          x出现m次至多次(至少m次)
  x\{m,n\}         x出现m次至n次
  NR变量定址,NR 表示AWK读入的行数
  FNR表示读入行所在文件中的行数
  逻辑运算——可直接引用域进行运算
  ==    >=        <    ~    !~
  如:# awk 'NR==1 {print}'  /etc/passwd
  root:x:0:0:root:/root:/bin/bash
  命令    如:{print $1,$2}
  3、读后处理
  END {awk_cmd1;awk_cmd2;}
  ---------------------------------------------------------------
  AWk的变量
  NR     AWK处理的总行数
  FNR   AWK处理的当前文件的行数,非全部
  FS     字段分隔符,默认为连续空格或制表符,可以使用多个不同的符号做分隔符,也可在options出使用  -F[:/]    指定分隔符
  OFS   输出字符的分隔符 默认是空格
  如:# awk -F: 'OFS="***" {print $1,$2}' /etc/passwd
  root***x
  NF     当前读入行的字段个数
  ORS   输出行的分隔符,默认是换行
  # awk -F: 'ORS="***" {print $1,$2}' /etc/passwd
  root x***bin x***
  FILENAME     当前文件名
  ---------------------------------------------------------------
  引用shell变量的方法:
  (1)使用 -v 引用变量值
  [root@localhost test]# a=5
  [root@localhost test]# awk -v c=$a  -F:  'NR < c {print NR,$0}' /etc/passwd
  1 root:x:0:0:root:/root:/bin/bash
  2 bin:x:1:1:bin:/bin:/sbin/nologin
  3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
  4 adm:x:3:4:adm:/var/adm:/sbin/nologin
  (2)把整个命令拆开传递,让shell变量外露
  [root@localhost test]# a=5
  [root@localhost test]# awk -F: 'NR < '$a'{print NR,$0}' /etc/passwd
  1 root:x:0:0:root:/root:/bin/bash
  2 bin:x:1:1:bin:/bin:/sbin/nologin
  3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
  4 adm:x:3:4:adm:/var/adm:/sbin/nologin
  ------------------------------------------------------------
  操作符
  赋值        =         +=         -=         /=         *=
  &&    ——逻辑与    ||——逻辑或     !——逻辑非
  匹配正则或不匹配,正则需要用 /正则/ 包围住
  ~          !~
  关系 比较字符串,要把字符串用双引号引起来
  <              >=     !=         ==
  字段引用
  $     字段引用需要加$        而变量引用直接用变量名取
  运算符
  +     -     *     /     %         ++     --
  转义序列
  \\         \自身
  \$         转义$
  \t         制表符
  \b         退格符
  \r         回车符
  \n         换行符
  \c         取消换行
  用法示例:
  # awk -F: '$3 >= 30 && $3 = 30 && NR

运维网声明 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.yunweiku.com/thread-556144-1-1.html 上篇帖子: 【一天一个shell命令】好管家--磁盘--df 下篇帖子: 监控服务器连通性的shell脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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