awk

一、awk介绍正则表达式

  全称:Aho Weinberger Kernaighan 三我的的首字母缩写shell

  grep 行过滤器express

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

  sed 行编辑器bash

    -n p  一、地址定界 二、命令 p a i w c \ s/pat/str/  g|&编辑器

  awk 报告生成器函数

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

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

  FS=" "指定分隔符对象

  

二、awk原理

 

三、awk用法

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

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

  二、多条program语句使用大括号包含起来,能够并列,能够嵌套

  awk '{print}' /etc/passwd 

四、potion

   -F   指定分隔符

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

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

  -v     由于awk是一种语言编辑器,能本身定义变量,同时也有内置变量(与环境变量相似)

    手动指定变量参数

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

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

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

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

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

  扩展: 了解cut 与awk的区别

五、awk本身的固定语法语句

  一、print

    默认输出(在屏幕上)

    在awk中没有保存命令,咱们能够关联别的命令来保存awk的结果

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

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

  格式符

  %s 字符串

  %d %i 数值

   %e %E  科学计算数值

   %c Acsii码值

  %f 浮点数

  %u 无符号整数

   %%  逃逸符  只显示%本身

  修饰符

  默认为右对齐

  - 表明左对齐

  %5.4f

  5 所占位属

  4 所取小数位

  

 

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

  内置变量 ---环境变量(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‘亦可

  

 

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

  二、对固定的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变量来指定

  三、/pat1/

  sed -n /pat1/p /etc/passwd

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

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

  

  五、模式匹配能够直接使用判断语句

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

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

  

 

  五、操做符

   运算操做符:

      + - * /  %  **  //  ^

    比较运算符

    == ! = > < >= <=

    ~!~

    

 

    逻辑操做符

    && || !

     赋值操做符:

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

    条件表达式:

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

  六、常见action

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

  一、expressions

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

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

  三、组合语句  compound statements

    /pat1/{{  }{;}}

  四、input statements输入语句

  五、output statements 输出语句

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

    一、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

    二、while语句

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

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

     

     

      

 

  八、数组

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

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

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

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

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

 

  九、函数

     一、内置函数

      函数的调用:funcation(参数)

      length()  统计字符串长度

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

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

      

 

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

 

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

    二、自定义函数

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息