博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk的简单用法
阅读量:5740 次
发布时间:2019-06-18

本文共 2788 字,大约阅读时间需要 9 分钟。

目录

1.awk的基本格式
2.awk中的变量
3.操作符

一.awk的基本格式

  • awk [options] 'program' file…
  • program:pattern{action statements;..}
  • pattern和action:
  • •pattern部分决定动作语句何时触发及触发事件 BEGIN,END
  • • action statements对数据进行处理,放在{}内指明 print, printf
  • 分割符、域和记录
    awk执行时,由分隔符分隔的字段(域)标记$1,$2..$n称 为域标识。$0为所有域。
    文件的每一行称为记录。
    省略action,则默认执行 print $0 的操作。
  • 工作原理
    1. 第一步:执行BEGIN{action;… }语句块中的语句
    2. 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这 个过程,直到文件全部被读取完毕。
    3. 第三步:当读至输入流末尾时,执行END{action;…}语句块
      print格式:
      print item1, item2, ...
      要点
      1.逗号分隔符
      1. 输出的各item可以字符串,也可以是数值;当前记录的字段、 变量或awk的表达式
      2. 如省略item,相当于print $0
        printf
        格式化输出:printf “FORMAT”, item1, item2, ...
        (1) 必须指定FORMAT
        (2) 不会自动换行,需要显式给出换行控制符,\n
        (3) FORMAT中需要分别为后面每个item指定格式符
        格式符:与item一一对应
        %c: 显示字符的ASCII码
        %d, %i: 显示十进制整数
        %e, %E:显示科学计数法数值
        %f:显示为浮点数 %g,
        %G:以科学计数法或浮点形式显示数值
        %s:显示字符串
        %u:无符号整数
        %%: 显示%自身
        修饰符
        : #[.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度,%3.1f
        -: 左对齐(默认右对齐) %-15s
        +:显示数值的正负符号 %+d

        二.awk中的变量

  • 1.内置变量
    1. FS:输入字段分隔符,默认为空白字符
    2. OFS:输出字段分隔符,默认为空白字符
    3. RS:输入记录分隔符,指定输入时的换行符,原换行符仍有效
    4. ORS:输出记录分隔符,输出时用指定符号代替换行符
    5. NF:字段数量
    6. NR:行号
    7. FNR:各文件分别计数,行号
    8. FILENAME:当前文件名
    9. ARGC:命令行参数的个数
      2.自定义变量
      -v var=value
      在program中直接定义

      三.操作符

      • 算术操作符:
        x+y, x-y, x
        y, x/y, x^y, x%y
        -x: 转换为负数
        +x: 转换为数值
        字符串操作符:没有符号的操作符,字符串连接
        赋值操作符
        ++ 变量加1
        -- 变量减1
        +=将加的结果赋给变量
        -= 将减的结果赋给变量
        *= 将乘的结果赋给变量
        /+ 将除的结果赋给变量
        %= 将取模的结果赋给量
        ^= 将取幂的结果赋给变量

比较操作符:

  • == 等于
  • != 不等于
  • > 大于
  • > = 大于等于
  • < 小于
  • <= 小于等于

    模式匹配符:
    ~:左边是否和右边匹配包含
    !~:是否不匹配

    例子                     [root@centos6 ~]# cat /etc/passwd                    root:x:0:0:root:/root:/bin/bash                    bin:x:1:1:bin:/bin:/sbin/nologin                    daemon:x:2:2:daemon:/sbin:/sbin/nologin                    adm:x:3:4:adm:/var/adm:/sbin/nologin                    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • 只取前三行
  • [root@centos6 ~]# cat /etc/passwd | awk 'NR<=3{print}'                                            root:x:0:0:root:/root:/bin/bash                                            bin:x:1:1:bin:/bin:/sbin/nologin                                            daemon:x:2:2:daemon:/sbin:/sbin/nologi
  • 只取出用户名 格式为 name 用户名

    [root@centos6 ~]# cat /etc/passwd | awk -F: ' NR<=3{ print "name", $1 }'                                                    name root                                                    name bin                                                    name daemon
  • 取出用户名及其uid 格式为 name:用户名 uid:XXX

    [root@centos6 ~]# cat /etc/passwd | awk -F: ' NR<=3{ printf "name: %-10s uid: %s\n", $1,$3}‘                                            name: root       uid: 0                                            name: bin        uid: 1                                            name: daemon     uid: 2
  • 取出用户root的信息

    [root@centos6 ~]# cat /etc/passwd | awk -F: ' $1~"root"{ print $0}'                                                root:x:0:0:root:/root:/bin/bash

转载于:https://blog.51cto.com/13572749/2093460

你可能感兴趣的文章
【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
查看>>
【云栖大会】探索商业升级之路
查看>>
HybridDB实例新购指南
查看>>
小程序,会是下一个创业风口吗
查看>>
C语言及程序设计提高例程-35 使用指针操作二维数组
查看>>
华大基因BGI Online的云计算实践
查看>>
深入理解自定义Annotation,实现ButterKnif小原理
查看>>
vim的快捷键大全
查看>>
zeromq学习笔记2——简单的客户端和服务端测试程序
查看>>
(转载)JavaScript大师Nicholas C. Zakas谈TypeScript
查看>>
jvm开启垃圾回收日志记录
查看>>
doT js模板入门
查看>>
[java] 多态实现的JVM调用过程
查看>>
iOS开发中的零碎知识点笔记 韩俊强的博客
查看>>
blade数据库操作之事务测试
查看>>
LVS项目遇到的问题
查看>>
排序高级之交换排序_冒泡排序
查看>>
Linux文件编辑命令详细整理
查看>>
C#多线程编程
查看>>
linux整理错误集合
查看>>