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

[经验分享] linux的awk命令

[复制链接]

尚未签到

发表于 2019-2-18 08:42:33 | 显示全部楼层 |阅读模式
  awk 是继 grep系 和 sed系 的第三个文本处理器

  gawk - pattern scanning and processing language
  格式:
  gawk [ options ] 'program' file ...
  program:/PATTERN/{ACTION statement; ...}
  PATTERN部分:决定动作语句何时触发以及通过什么事件来触发;
  BEGIN,END
  ACTION statement:对数据进行特定的处理,通常放置在{}中,并使用单引号进行引用;
  print,printf
  对awk来说,是需要有分隔符这个概念的,因为awk是根据分隔符来区分所需要操作的字段的;

  输入分隔符:

  awk对数据进行处理时,会根据特定的标识符号对数据进行分段处理,这种标识就称为“输入分隔符”,默认输入分隔符为空格;

  输出分隔符:

  awk在对数据处理完毕之后,会以特定的标识符号对各个字段进行连续后输出。这种标识就称为“输出分隔符”,默认输出分隔符是空白字符;
  记录:

  由换行符进行分隔的数据中的一行,称为一条记录;通常用$0来保存整个记录的内容;

  

  字段:

  经过分隔符分隔之后的每一个数据分段,都称为一个字段(field);通常在使用awk处理数据时,使用$1, $2, ..$NF等内置变量来存储各个字段的数据;
  awk的最全的工作模式: BEGIN{ACTION statement}{ACTION statement}END{ACTION statement}
  首先执行BEGIN语句块,其次是主语句块,最后是END语句块;特别提示:BEGIN语句块执行的时候,不会处理数据内容,是在处理数据之前执行的语句,一般用于表头的书写;相反的END语句块,是执行玩数据处理之后,才会执行的语句,一般用于输出总数;BEGIN和END语句块都有可以省略不写,但是中间的语句块必须要写,不能省略;
  常用选项:
  -f program-file:从指定的文件中加载program语句块,而不是通过命令行给出相关的程序内容;
  -F fs:指定出入字段的输入分隔符;默认是空白字符;
  -v  var=val:用于声明自定义变量并为变量赋值;
  awk的常用用法:
  1.变量:

  内建变量:
  FS:input field separator,输入字段分隔符,默认为空白字符;
      OFS:output field separator,输出字段分隔符,默认为空白字符;

            RS: input record separator,输入记录(行)分隔符,默认为换行符;
注意:如果指定了额外的输入记录分隔符,原有的换行符依然有效;
            ORS:output record separator,输出记录分隔符;默认为换行符;

  NF:number of fields,每一行中字段的总数;



  NR:total number of input records,行的总数;如果仅处理一个文件,可以将NR的值当做此文件的各行的行号;

  FNR: The input record number in the current input file,对于不同的文件分别统计其行的数量,也可以显示每个文件中每行的行号;

  FILENAME:The name of the current input file,当前正在被处理的文件的文件名;

  ARGC:The number of command line arguments,自定义变量命令行中参数的数量,包括awk命令本身,但不包括awk命令的选项部分和program部分;

  ARGV:Array of command line arguments.由命令行中所有的参数所构成的数组;

  自定义变量:

  -v var_name=value(变量名大小写敏感)

  常用的ACTION:
  2.print:Print the current record,以标准格式输出结果;
  格式:
  print  item1,item2,...

  注意:
      1) 各item之间需要使用","进行分隔;
      2) 输出的各item可以是字符串,可以是数字,可以是当前记录中的字段,可以是变量,可以是awk的表达式;
      3) 如果省略了item,则默认的item为$0,即:输出整行


  3.printf:Format and print.以特定的格式输出结果;
  格式:

  printf "FORMAT" item1,item2,...
  注意:

  1) 必须给出合适的输出格式:
  2) 默认不会自动换行,如果想要在输出结果中换行显示,需要显示出给定的换行控制符号,即:\n;
  3) FORMAT中需要为后面的每一个item单独指定一个格式化符号;
  常用的FORMAT:

  %c:以ASCII码表中的内容显示字符信息;
  %d,%i:显示十进制整数格式;
  %e,%E:以科学计数法来显示数字;浮点类型;
  %f,%F:显示十进制数字的浮点形式;
  %g,%G:以科学计数法来下那是浮点数字;
  %u:显示无符号的十进制数;
  %s:显示字符串;
  %x,%X:显示无符号的十六进制总数;
  %%:显示一个%;
  修饰符:
  #[.#]:第一个数字用来控制显示宽度;第二个数字表示小数点的精度;
  如:%5s,%8.3f
  -:表示采用左对齐方式显示;默认是右对齐;
  +:显示数字的正负符号;

  4.操作符:

  算术运算操作符:
  双目运算符:

  x+y,x-y,x*y,x/y,x^y, x%y
  单目运算符:

  -x: 将正整数转换为负整数;
  +x:将字符串转换为数值;
  字符串操作符:
          无任何操作符号时,即为字符串连接操作;
  赋值操作符:
          =,+=,-=,*=,/=,^=,%=
  ++, --
      比较操作符
          ==,!=,=

  模式匹配操作符:
              ~:操作符左侧的字符串是否能够被右侧的PATTERN所匹配;
              !~:操作符左侧的字符串是否不能被右侧的PATTERN所匹配;

  逻辑运算操作符:
  &&     ||      !


  条件表达式:
  selector(condition)?if-true-expression:if-false-expression

  5.PATTERN部分:
  1) empty:空模式,不加区分地处理文件的每一行;
  2) [!]/REGEXP/:仅处理[不]能被PATTERN匹配到的行;

  3) 关系表达式:
  $3>=1000
  $NF~/bash/
  4) 行域,行范围:
  关系表达式的逻辑运算:FNR>=10&&FNR

运维网声明 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-673758-1-1.html 上篇帖子: Linux 常用文本操作 下篇帖子: linux系统iptables的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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