zoukankan      html  css  js  c++  java
  • awk

    1、awk介绍
      在linux上实际上叫做gawk;

      grep:行过滤器

      sed:行编辑器

      awk:报告生成器
      通过模式匹配以及自己本身的语言格式,来获取并输出客户所需要的内容;
      【默认情况下,三个工具都不去编辑原文件】

      示例:获取系统上面用户id大于等于1小于等于500的用户的用户名和用户ID
      for i in $(cut -d: -f3 /etc/passwd);do
      if [ $i -ge 1 -a $i -le 500 ];then
      echo grep $i | cut -d: -f1,3
      fi
      done

      #awk -F: '{print $3}'

    2、awk工作原理
      依次把匹配到的行使用awk工具进行编辑或者格式化输出,所以,关于行的循环,awk就不用去理会了。

      1、做分割
      2、pattern;通过模式匹配对应的字段,过滤行;
      (地址定界)
      3、通过对应的命令(printf)做格式化输出

      【难点:关联逻辑语句,它有自己的语法格式;】

     

    3、awk的用法
      awk [option]... 'program' FILE...
      1、program 必须使用单引号!!!!
      2、多条program语句使用大括号包含起来,可以并列,可以嵌套

      awk'{print}' /etc/passwd


    4、awk的常见option
      -F 指定分隔符
      awk -F[/:] '{print $1,$3}' a.txt
      其中[]内表示多个字符中的任意一个
      -v 因为awk是一种语言编译器,能自己定义变量,同时也有内置变量(与环境变量类似)
      手动指定参数
      awk -v a="a/b" '{print a}' a.txt
      给a赋值,打印a这个变量
      1、a是自定义变量 -v FS=":"
      2、在awk中调用调用变量 不用加$符号
        awk '{a="a/b";print a}' a.txt

        扩展:了解cut与awk的区别;


    5、awk的语法格式 -- program
      1、print
        默认输出(在屏幕上)
        在awk中没有保存命令,我们可以关联别的命令来保存awk的结果
        awk '{a="a/b";print a}' a.txt | tee a.bak

      2、printf --- 实现格式化输出
        printf"%s是%d班学的最好的学生",变量1,变量2
        【仅仅只有顺序关系】
      格式符:
        %s 字符串
        %d %i 数值
        %e %E 科学计算数值
        %c ASCII码值
        %f 浮点数
        %u 无符号整数
        %% 逃逸符 只显示%自己

      修饰符:
        默认为右对齐
        - 代表左对齐
        %5.4f 5代表所占位数
        4代表所取小数位

      3、变量(内置变量、自定义变量)
      内置变量 -- 环境变量(bash)(env、set、-C +C)
      awk语言默认支持的变量
        FS 定义输入分隔符的变量
        OFS 定义输出分隔符的变量
        NF($NF 定义行分割以后最后的一列变量)
          *变量引用的时候,不用加$,
        NR 定义文件的行数,定义多个文件的时候文件的行号叠加
        FNR 文件只计算自己的行号
          awk '{print NR}' /etc/passwd
          awk '{print NR}' /etc/passwd /etc/fastab
        FILENAME 存储文件的名字
          awk '{print FILENAME}' /etc/passwd //把文件名打印N次,N文件的行数
          awk 'BEGIN{print NR}' /etc/passwd
          //BEGIN 只在行循环开始时,执行一次
        ARGC 整个命令的段数【注意:不包含命令本身自己(也就是ARGC所在的段)】
          awk '{print ARGC}' /etc/passwd
        ARGV 调取命令中指定的段【注意:数组中也不包含命令本身自己】
        RS 指定换行符【注意:可以指定新的换行符,不影响本身的换行符】
        ORS 输出的时候指定的换行符,将默认换行符替换为指定字符
          awk -v ORS=' ' '{print}' /etc/passwd //将默认换行符指定为空格


      自定义变量
        -v 变量=值
        在后面'program'中去调用自定义变量时,直接使用即可
        或者将"变量=值"语句直接写在'program'亦可;
        awk -v a="a/b" '{print a}' a.txt
        awk '{a="a/b";print a}' a.txt

  • 相关阅读:
    yum、RPM常用的命令(转)
    10个你可能从未用过的PHP函数(转)
    sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法(转)
    MySQL查询in操作 查询结果按in集合顺序显示(转)
    sphinx配置文件继承
    开源搜索引擎Sphinx 中启动多个搜索进程的方法(转)
    sphinx的简单实例
    Python中的join()函数的用法
    django queryset values&values_list
    Django中的QuerySet查询优化之select_related
  • 原文地址:https://www.cnblogs.com/4443056bdH/p/11392340.html
Copyright © 2011-2022 走看看