AWK说明-及语法格式。

AWK简介

  • awk是一款文本信息的统计,报告生成的工具.awk有自己的语法,是一款独立的编程语言.
  • awk支持从文本文件中读取内容,或者从标准的输入中读取内容.
  • awk 的最终起源于行编辑器ed,awk继承了行编辑器的特点,循环的读取文本的每一行(或者是分隔符分割的每一段文本)直至文本结束,但是awk加入了段分割符的概念.将每次读入的行进行再次分割.awk每次读取的行都只是未经过awk语句处理的对象。或读取行后会根据段分割符在将行分成多个对象。结构近似数组,然后进行指定语句的操作
  • awk 的对命令的处理可以称为命令的解释,或脚本语言的解释。 awk的语句书写格式,属于模块化风格,特别是if,else语句表现的特别明显有点类似于bash中的匿名函数。每个语句块必须使用{}进行约束

awk的基本执行过程:

  • 执行BEGIN语句块中的内容,语句为可选语句.多用于执行变量的初始化,报表的头输出.
  • 从标准输入或文件中读取行分割符(-F定义的字符)分割的行进入内存,进行语句之前的条件匹配,在没有条件时默认为符合执行条件.符合条件执行,不符合条件则尝试匹配下一个语句之前的条件.直至所有条件匹配全部完成.当语句为空时默认执行{print $0}
  • 继续读取下一行,直至末尾
  • 执行END定义的语句内容,同样也为可选语句.多用于报表的统计信息输出.

基本格式 :

awk 选项 条件 语句 文件

  • 在bash命令行中执行awk时,在向awk传入语句时,语句优先由bash优先解释。也就是说可以向awk传入语句时可以,bash展开传入一些奇怪的东西,比如说系统变量,比如说{1..4}


  • 选项:

-f 从文件中读取处理命令
-F 指明行的段分隔符;分割针对输入时的数据。支持模式匹配。扩展的正则表达式,目的是将行分割成为多个对象.或确定每次循环时待处理的对象(最小待处理单位)是什么.默认的
-v 自定义变量
awk -v



  • 条件:

awk是一门语言,请以编程的视角去看待条件。
条件为执行条件后的语句的要求。符合条件才可执行语句,条件即为对语句的判断,可以使用正则匹配,基于正则的模式定界,字符串比较,可以使用算数条件表达式,也可以是BEGIN,END特殊条件。
算数条件表达式,最终返回运算结果,当运算结果为0时,语句不执行。
在进行条件验证时行已经被分割成最小的单位,并已经对最小单位的小数量,内容,行号等信息进行了统计。

  • 当条件为空时执行每一行
例:正则_匹配正则匹配的每一行  
    awk '/^UUID/{print $1}' /etc/fstab   #匹配以UUID为开始的行,并执行{}中的语句。print $1   
    awk '!/^UUID/{print $1}' /etc/fstab  #匹配以非UUID为开始的行,执行{}中的语句 。print $1

例:算数计算_条件为真该行才会被处理 ,条件 为假则不处理 。
    awp -F: '$3>=1000{print $1,$3}' /etc/passwd
    awp -F: '!$3>=1000{print $1,$3}' /etc/passwd
    awk -F: '(NR>=2&&NR<=10){print $1}'

例:字符串比较_比较结果为真进入循环
    awk -F'$NF="/bin/bash"{print $1,$NF}' /bin/passwd
    awk -F'$NF~/bash$/{print $1,$NF}' /bin/passwd
    awk -F: '! ($NF=="/bin/bash")' /etc/passwd

例:行范围_范围内的行做处理 ,好像只支持模式定界
    awk -F'10,20{print $1}'  #----失败了  
    awk -F'/^root/,/^myuser/{print $1}'

例:特殊条件_BEGIN/END 
    awk 'BEGIN{print "  username    ID  \n------------"}{printf "%10s:%-s" $1,$3}END{print "=========\n"}'
        # BEGIN:在开始之前显示一次  
        # END:在文本处理完成 ,命令未完成时,执行一次

例:特殊条件_0,空
    awk -v aa="" 'aa' /etc/passwd     #变量aa的值为空 ,(语句为空执行默认语句)。但是条件为空,不执行默认语句。
    awk -v aa=" " 'aa' /etc/passwd    #变量aa的值为‘ ’空格不为空执行默认语句
    awk -v aa="0" 'aa' /etc/passwd    #变量aa的值为0,条件为最终值为0,默认语句不执行。
    awk -v aa=
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值