awk

1、awk介绍

  全称:Aho Weinberger Kernaighan 三个人的首字母缩写

  grep 行过滤器

    -o -i -v取反 -E正则表达式  grep egrep fgrep(匹配速度最快)

  sed 行编辑器

    -n p  1、地址定界 2、命令 p a i w c \ s/pat/str/  g|&

  awk 报告生成器

    通过模式匹配以及自己本身的语言格式,来获取,并输入

  【默认情况下,三个工具都不去编辑源文件】

  FS=" "指定分隔符

  

2、awk原理

 

3、awk用法

   awk 选项 ... 'program'  file...

  1、program 必须使用!单引号!

  2、多条program语句使用大括号包含起来,可以并列,可以嵌套

  awk '{print}' /etc/passwd 

4、potion

   -F   指定分隔符

  awk -F[/:] '{print $1,$3}' a.txt

      其中[ ]内表示多个字符中的任意一个

  -v     因为awk是一种语言编辑器,能自己定义变量,同时也有内置变量(与环境变量类似)

    手动指定变量参数

  awk -v a="a/b" '{print }' a.txt

    给a赋值,打印a这个变量

    1、a是自定义变量 -v FS=":"

    2、在awk中调用变量 不用加¥符号

  awk '{a="a/b";print a}' a.txt

  扩展: 了解cut 与awk的区别

5、awk自己的固定语法语句

  1、print

    默认输出(在屏幕上)

    在awk中没有保存命令,我们可以关联别的命令来保存awk的结果

    awk '{a="a/b";print a}' a.txt | tee a.bak

  2、printf ---实现格式化输出

  格式符

  %s 字符串

  %d %i 数值

   %e %E  科学计算数值

   %c Acsii码值

  %f 浮点数

  %u 无符号整数

   %%  逃逸符  只显示%自己

  修饰符

  默认为右对齐

  - 代表左对齐

  %5.4f

  5 所占位属

  4 所取小数位

  

 

  3、变量(内置变量、自定义变量)

  内置变量 ---环境变量(bash)(env、set -C +C)

  awk语言所默认支持的变量

  FS  定义输入分隔符的变量

  OFS    定义输出分隔符的变量

  NF  定义行分割以后的参数个数($NF 分割以后最后一列的变量)

      变量引用的时候不用加$,$0,$1....$n

  

  NR  定义文件的行数,定义多个文件的文件行,行号叠加

  FNR  文集只计算自己的行号

  

  begin{语句}只在行循环开始时,执行一次

  ARGC 整个命令的段数  [注意:不包含'program'本身]

  ARGV 数组,用来调用命令中,指定的段ARGV[2] 【注意:数组中也不包含'program'】

  RS  指定换行符  \n可以指定新的换行符,不影响本身的换行

  ORS 输出的时候指定的换行符,将默认换行符替换为指定字符

  

 

  自定义变量

    -v 变量=值

    在后面'program'中去调用自定义变量时,直接使用即可或者将“变量=值”语句直接写                  在’program‘亦可

  

 

  4、模式匹配(地址定界)
  1、空值、没有定义,默认就将文本所有的行,放入awk进行循环

  2、对固定的1,3行进行操作

  sed -n '1,3p' /etc/passwd

  awk '1,3{print}' /etc/passwd  ///awk默认不支持1-3 1,3等等,这样数值的直接写法;

  awk 'NR>=1&&NR<=3{print}' /etc/passwd  //通过NR变量来指定

  3、/pat1/

  sed -n /pat1/p /etc/passwd

  awk '/r..ter/{print}' /etc/passwd

  4、/pat1/,/pat2/  第一次匹配pat1到第一次匹配pat2,之间的行

  

  5、模式匹配可以直接使用判断语句

  awk -F:'$NF=="/bin/bash"{print $1,$3}' /etc/passwd 

  6、BEGIN在默认循环进行操作前所要执行的语句;

  

 

  5、操作符

   运算操作符:

      + - * /  %  **  //  ^

    比较运算符

    == ! = > < >= <=

    ~!~

    

 

    逻辑操作符

    && || !

     赋值操作符:

    = += -= /= *= %= ^= //=

    条件表达式:

    语句条件? 条件成立语句;条件 不成立的语句

  6、常见action

  print printf 以及他任何命令的操作都是action

  1、expressions

  2、control statement 控制语句  例如:  if while等

    逻辑关系语句判断来进行结合

  3、组合语句  compound statements

    /pat1/{{  }{;}}

  4、input statements输入语句

  5、output statements 输出语句

  7、常见语言(if while do for break continue )

    1、if语句

        语法格式:if(条件表达式){执行语句}

          if(条件表达式){执行语句} else {执行语句}

      awk '/^title/{if(NF<=2) {print}else {print "参数过少"}}' /boot/grup/grup.conf

      awk '/^title/{if(NF>=2) print $4}' /boot/grup/grup.conf

    2、while语句

      只有对行参数进行遍历的时候才会使用循环;

      语法格式:while(条件表达式){循环体}

     

     

      

 

  8、数组

  在awk中,数组和shell中的数组特性相同

      注意:awk中数组不用定义,只要使用了,就有值为空的默认数组;这在做数据统计的时候非常常见!!!!!

    行遍历 - -->   实际上就是整个文件的遍历

    列遍历  ---->   取对象固定某列中的相同数据的统计

      注意:数组通过for语句再给其他变量进行赋值的时候,赋值的是index索引信息;

 

  9、函数

     1、内置函数

      函数的调用:funcation(参数)

      length()  统计字符串长度

      数学运算上使用的函数  sin()  cos().....

      sub(x,x,x)  替换第一个匹配到的值

      

 

      gsub(x,x,x)  替换该行所匹配道德所有值

 

      split(x,x,x)  指定分隔符去切割文件

    2、自定义函数

posted @ 2019-08-22 17:33  失烦先生  阅读(1020)  评论(0编辑  收藏  举报