awk的简单用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk的简单用法相关的知识,希望对你有一定的参考价值。

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

一.awd的基本格式

  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
        +=将加的结果赋给变量
        -= 将减的结果赋给变量
        *= 将乘的结果赋给变量
        /+ 将除的结果赋给变量
        %= 将取模的结果赋给量
        ^= 将取幂的结果赋给变量

比较操作符:
== 等于
!= 不等于

大于
= 大于等于
< 小于
<= 小于等于
模式匹配符:
~:左边是否和右边匹配包含
!~:是否不匹配

            例子  

                       [[email protected] ~]# 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

        只取前三行

                   [[email protected] ~]# 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  用户名

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

                [[email protected] ~]# 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的信息 

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

以上是关于awk的简单用法的主要内容,如果未能解决你的问题,请参考以下文章

awk简单用法

awk用法

Linux中awk命令的简单用法

文本处理工具AWK简单用法案例

awk 的一些用法

性能测试日志分析之awk基础用法