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

转载于:https://www.cnblogs.com/4443056bdH/p/11392340.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值