zoukankan      html  css  js  c++  java
  • Linux三剑客之awk命令详解

    一、awk介绍

    AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言, 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

    快速掌握awk的技巧:只要记住awk是以行为单位读入和输出的。

    二、awk常用选项和命令

    -F 指定字段一个或多个分割符 例如:-F'[:#/]'   定义三个分隔符
    -v 定义或修改一个awk内部的变量
    NR 行号
    FS 字段的分隔符,默认为空格,跟-F选择一样
    OFS 输出的字段分隔符,默认为空格(即把空格替换成指定的字符串)
    RS 输入记录的分割,以分割符分割之后,使之成为新的行(即读入行的时候遇到指定分隔符,就把分割替换成 )。
    ORS 输出的记录分隔符,默认为新行。(即读入行的时候遇到 之后把 用指定的分隔符代替,然后读入一行,并合并为同一行)
    $NF 表示最后一列
    $0 显示当前一整行
    $N N为数字(N>0),表示第几列。例如:$1表示用-F指定分隔符分隔后的第一列,$2...$N以此类推
    {} 命令代码块,包含一条或多条命令
    ; 多条命令使用分号分隔
    ~ 匹配字段,与==相比不是精确比较
    !~ 不匹配,不精确比较
    == 等于,必须全部相等,精确比较
    > 大于
    < 小于
    >= 大于等于
    <= 小于等于
    !=  不等于,精确比较
    && 逻辑与
    || 逻辑或
    + 匹配1个或1个以上
    // 正则匹配符
    print 输出、打印

    三、AWK的选项

    选项 描述

    -f progfile     

    --file=progfile                                  

    从脚本文件中读取awk命令

    -F fs             

    --field-separator=fs 

    指定字段一个或多个分割符 例如:-F'[:#/]'   定义三个分隔符

    -v var=val     

    --assign var=val

    定义或修改一个awk内部的变量

    -b                 

    --characters-as-bytes

    将所有输入数据视为单字节字符。posix选项或覆盖这个选项

    -c       

    --traditional

    在兼容模式下运行。在兼容模式下,gawk的行为与UNIX awk相同;没有一个可以识别特定于gn的扩展

    -C     

     --copyright

    在标准输出和退出中成功打印GNU版权信息消息的简短版本

    -d[file]

    --dump-variables[=file]

    将全局变量的排序列表、它们的类型和最终值打印到文件中。如果没有提供文件,gawk使用一个名为awkvars的文件

    -e 'program-text'

    --source='program-text'

    使用程序文本作为AWK程序源代码。这个选项允许轻松地将库函数(通过-f和-file选项使用)与在命令行中输入的源代码混合使用。它主要用于shell脚本中使用的中型到大型AWK程序

    -E file    --exec=file

    与-f类似,这是最后一个处理的选项。这应该与#一起使用!脚本,特别是为CGI应用程序,以避免从URL向命令行传递选项或源代码(!)。这个选项禁止命令行变量赋值

    -g                 

    --gen-pot

    扫描和解析AWK程序,并在标准输出上生成GNU .pot(可移植对象模板)格式文件,其中包含程序中所有可本地化字符串的条目。程序本身没有执行。

    -h                 

    --help

    简短的打印帮助

    -L [fatal]       

    --lint[=fatal]

    提供关于可疑或不可移植到其他AWK实现的构造的警告

    -n           

    --non-decimal-data

    识别输入数据中的八进制和十六进制值

    -N         

    --use-lc-numeric

    使用句点作为小数点

    -O               

     --optimize

    在程序的内部表示上启用优化。目前,这包括简单的常数合并

    -p[file]           

    --profile[=file]

    将分析数据发送到PROFIX文件。默认值是DouthPo.OUT
    -P   --posix

    启动兼容模式;将有如下限制:
    <1>无法识别x
    <2>当FS被设置为单个空间时,只有空格和Tab充当字段分隔符,换行符不被设置为分隔符
    <3>之后行不能有?和:
    <4>关键字函数的同义词FUNC不被识别
    <5>运算符**和**=不能代替^和^=

    -r     --re-interval 允许在正则表达式匹配中使用区间表达式
    -R    --command file 只有DGAWK。从文件读取存储的调试器命令
    -S    --sandbox

    在沙盒模式下运行GOWK,禁用Stand()函数,用GETLIN输入重定向,输出Read打印和打印的方向,并加载动态扩展。命令执行(通过管道)也被禁用。这有效地阻止了脚本访问本地资源(除了
    命令行中指定的文件)

    -t     --lint-old 提供对UNIX AWK原始版本不可移植的结构的警告
    -V    --version 打印AWK的版本信息

    四、AWK的环境变量

    变量 描述
    $N N为数字(N>0),表示第几列。例如:$1表示用-F指定分隔符分隔后的第一列,$2...$N以此类推
    $0 显示当前一整行
    $NF 表示最后一列
    ARGC 命令行参数的数目
    ARGIND 命令行中当前文件的位置(从0开始算)
    ARGV 包含命令行参数的数组
    CONVFMT 数字转换格式(默认值为%.6g)
    ENVIRON 环境变量关联数组
    ERRNO 最后一个系统错误的描述
    FIELDWIDTHS 字段宽度列表(用空格键分隔)
    FILENAME 当前文件名
    NR 行号(当前记录数)
    FNR 同NR,但相对于当前文件
    FS 字段的分隔符,默认为空格,跟-F选择一样
    OFS 输出的字段分隔符,默认为空格(即把空格替换成指定的字符串)
    IGNORECASE 如果为真,则进行忽略大小写的匹配
    NF 当前记录中的字段数
    OFMT 数字的输出格式(默认值是%.6g)
    RLENGTH 由match函数所匹配的字符串的长度
    RS 输入记录的分割,以分割符分割之后,使之成为新的行(即读入行的时候遇到指定分隔符,就把分割替换成 (默认是 ))
    ORS 输出的记录分隔符,默认为新行。(即读入行的时候遇到 之后把 用指定的分隔符代替,然后读入一行,并合并为同一行)(默认值是一个换行符)
    RSTART 由match函数所匹配的字符串的第一个位置
    SUBSEP 数组下标分隔符(默认值是34)

    五、AWK的运算符 

    运算符 描述
    = += -= *= /= %= ^= **= 赋值
    条件表达式?值1:值2 三目运算符                                                                                                                       
    || 逻辑或
    && 逻辑与
    ~ ~! 匹配正则表达式和不匹配正则表达式
    < <= > >= != == 关系运算符
    空格 连接符
    + - 加,减
    * / % 乘,除与求余
    + - ! 一元加,减和逻辑非
    ^   *** 幂运算符
    ++ -- 增加或减少,作为前缀或后缀
    $ 字段引用
    in 数组成员

    六、AWK的内置的字符串函数

    函数名称 描述
    gsub(r,s) 在整个$0中用s代替r                                           
    gsub(r,s,t) 在整个t中用s替代r
    index(s,t) 返回s中字符串t的第一位置
    length(s) 返回s长度
    match(s,r) 测试s是否包含匹配r的字符串
    split(s,a,fs) 在fs上将s分成序列a
    sprint(fmt,exp) 返回经fmt格式化后的exp
    sub(r,s) 用$0中最左边最长的子串代替s
    substr(s,p) 返回字符串s中从p开始的后缀部分
    substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

    七、AWK使用演示

    1、演示文本

    [root@WT data]# cat test.txt 
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    wt:x:1000:1000:wt:/home/wt:/bin/bash
    test2:x:1001:1001::/home/test2:/bin/bash

    2、{}命令代码块及print的使用

    •{}  代码块

    •print   输入、打印内容

     1 [root@WT data]# awk '{print}' test.txt 
     2 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     3 halt:x:7:0:halt:/sbin:/sbin/halt
     4 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
     5 operator:x:11:0:operator:/root:/sbin/nologin
     6 games:x:12:100:games:/usr/games:/sbin/nologin
     7 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
     8 ntp:x:38:38::/etc/ntp:/sbin/nologin
     9 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    10 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    11 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    12 dbus:x:81:81:System message bus:/:/sbin/nologin
    13 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    14 nobody:x:99:99:Nobody:/:/sbin/nologin
    15 abrt:x:173:173::/etc/abrt:/sbin/nologin
    16 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    17 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    18 wt:x:1000:1000:wt:/home/wt:/bin/bash
    19 test2:x:1001:1001::/home/test2:/bin/bash

    3、NR的使用

    •显示行号

    [root@WT data]# awk '{print NR}' test.txt 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    •指定行号,与"=="一起使用(下列例如为显示文本第二行)

    [root@WT data]# awk 'NR==2 {print}' test.txt 
    halt:x:7:0:halt:/sbin:/sbin/halt

    4、$0的使用

    •$0显示当前的一行

    [root@WT data]# awk '{print NR $0}' test.txt 
    1shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    2halt:x:7:0:halt:/sbin:/sbin/halt
    3mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    4operator:x:11:0:operator:/root:/sbin/nologin
    5games:x:12:100:games:/usr/games:/sbin/nologin
    6ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    7ntp:x:38:38::/etc/ntp:/sbin/nologin
    8apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    9tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    10sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    11dbus:x:81:81:System message bus:/:/sbin/nologin
    12postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    13nobody:x:99:99:Nobody:/:/sbin/nologin
    14abrt:x:173:173::/etc/abrt:/sbin/nologin
    15systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    16polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17wt:x:1000:1000:wt:/home/wt:/bin/bash
    18test2:x:1001:1001::/home/test2:/bin/bash
    19

    5、-F与$N(N为数字)、$NF的使用

    #例子说明:使用-F选项指定分隔符为":"冒号,输入切割后的$1(第一列)和$NF(最后一列)

    1 [root@WT data]# awk -F ":" 'NR==2 {print $0}' test.txt 
    2 halt:x:7:0:halt:/sbin:/sbin/halt
    3 [root@WT data]# awk -F ":" 'NR==2 {print $1,$NF}' test.txt 
    4 halt /sbin/halt

    #例子说明:使用-F选项指定分隔符为" 0/"(空格、数字0、/),取出文件的权限644

     1 [root@WT data]# stat test.txt 
     2   File: ‘test.txt’
     3   Size: 891           Blocks: 8          IO Block: 4096   regular file
     4 Device: 802h/2050d    Inode: 3407880     Links: 1
     5 Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
     6 Access: 2018-09-30 19:04:00.755834056 +0800
     7 Modify: 2018-09-30 19:03:12.389575356 +0800
     8 Change: 2018-09-30 19:03:57.494833754 +0800
     9  Birth: -
    10 [root@WT data]# stat test.txt |awk -F "[ 0/]" 'NR==4{print $3}'
    11 644

    6、>=和<=的使用(其他运算法与之相同)

    #例子说明:输出行号大于5的行

    [root@WT data]# awk 'NR>=5{print NR,$0}' test.txt 
    5 games:x:12:100:games:/usr/games:/sbin/nologin
    6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    7 ntp:x:38:38::/etc/ntp:/sbin/nologin
    8 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    9 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    10 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    11 dbus:x:81:81:System message bus:/:/sbin/nologin
    12 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    13 nobody:x:99:99:Nobody:/:/sbin/nologin
    14 abrt:x:173:173::/etc/abrt:/sbin/nologin
    15 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17 wt:x:1000:1000:wt:/home/wt:/bin/bash
    18 test2:x:1001:1001::/home/test2:/bin/bash
    19 

    #例子说明:输出行号小于5的行

    [root@WT data]# awk 'NR<=5{print NR,$0}' test.txt 
    1 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    2 halt:x:7:0:halt:/sbin:/sbin/halt
    3 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    4 operator:x:11:0:operator:/root:/sbin/nologin
    5 games:x:12:100:games:/usr/games:/sbin/nologin

    7、&&与||的使用

    #例子说明:输出行号大于5且小于10的行

    [root@WT data]# awk 'NR>5 && NR<10 {print NR,$0}' test.txt 
    6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    7 ntp:x:38:38::/etc/ntp:/sbin/nologin
    8 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    9 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

    #例子说明:输出行号小于5或行号大于10的行

    [root@WT data]# awk 'NR<5 || NR>10 {print NR,$0}' test.txt 
    1 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    2 halt:x:7:0:halt:/sbin:/sbin/halt
    3 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    4 operator:x:11:0:operator:/root:/sbin/nologin
    11 dbus:x:81:81:System message bus:/:/sbin/nologin
    12 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    13 nobody:x:99:99:Nobody:/:/sbin/nologin
    14 abrt:x:173:173::/etc/abrt:/sbin/nologin
    15 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17 wt:x:1000:1000:wt:/home/wt:/bin/bash
    18 test2:x:1001:1001::/home/test2:/bin/bash
    19

    8、//和~、+的使用

    •//  使用正则匹配的格式,//中间放置匹配的内容

    •~  匹配//中防止的内容

    •+  匹配一个或者多个

    例子说明:列出/etc/servicesx文件中(http|https|mysql|ssh|telnet|ftp)的端口号,由于/etc/service的文件内容每行有多个空格,所以使用"+"把多个空格和/合并为一个再进行切割。

    可以看如下例子加"+"符号与不加"+"所使用的$N的N的数字为多少。

     1 [root@WT ~]# awk -F "[ /]" '$1~/^(http|https|ssh)$/{print $0}' /etc/services
     2 ssh             22/tcp                          # The Secure Shell (SSH) Protocol
     3 ssh             22/udp                          # The Secure Shell (SSH) Protocol
     4 http            80/tcp          www www-http    # WorldWideWeb HTTP
     5 http            80/udp          www www-http    # HyperText Transfer Protocol
     6 http            80/sctp                         # HyperText Transfer Protocol
     7 https           443/tcp                         # http protocol over TLS/SSL
     8 https           443/udp                         # http protocol over TLS/SSL
     9 https           443/sctp                        # http protocol over TLS/SSL
    10 ssh             22/sctp                 # SSH
    11 [root@WT ~]# awk -F "[ /]" '$1~/^(http|https|ssh)$/{print $1,$14}' /etc/services
    12 ssh 22
    13 ssh 22
    14 http tcp
    15 http udp
    16 http sctp
    17 https 
    18 https 
    19 https 
    20 ssh 22
    21 [root@WT ~]# awk -F "[ /]+" '$1~/^(http|https|ssh)$/{print $1,$2}' /etc/services
    22 ssh 22
    23 ssh 22
    24 http 80
    25 http 80
    26 http 80
    27 https 443
    28 https 443
    29 https 443
    30 ssh 22

    注意:不加"+"符号,从例子可以看到,虽然通过加大$N的N的数值可以获取到端口号,但是却不能使全部需要匹配的服务得到对应的端口号,这是因为-F选项指定的空格分隔符是一个一个匹配,而默认的awk命令是以空格+匹配空格,所以第二个例子指定[空格/]+就可以是所需查询的服务截取出端口了。

    9、if( 条件{ 符合条件之后执行的语句 } else { 条件不成立时执行的语句 }  AWK的流程控制语句  注意,如果执行语句不用{ }符号括起来,那么在后面加";"分号

     1 [root@WT data]# awk '{if(NR%2==0){print NR,$0} else if(NR==19){print "我是空行"} else{print "我是奇数行"}}' test.txt 
     2 我是奇数行
     3 2 halt:x:7:0:halt:/sbin:/sbin/halt
     4 我是奇数行
     5 4 operator:x:11:0:operator:/root:/sbin/nologin
     6 我是奇数行
     7 6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
     8 我是奇数行
     9 8 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    10 我是奇数行
    11 10 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    12 我是奇数行
    13 12 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    14 我是奇数行
    15 14 abrt:x:173:173::/etc/abrt:/sbin/nologin
    16 我是奇数行
    17 16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    18 我是奇数行
    19 18 test2:x:1001:1001::/home/test2:/bin/bash
    20 我是空行
    21 [root@WT data]# awk '{if(NR%2==0) print NR,$0; else if(NR==19) print "我是空行";else print "我是奇数行";}' test.txt 
    22 我是奇数行
    23 2 halt:x:7:0:halt:/sbin:/sbin/halt
    24 我是奇数行
    25 4 operator:x:11:0:operator:/root:/sbin/nologin
    26 我是奇数行
    27 6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    28 我是奇数行
    29 8 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    30 我是奇数行
    31 10 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    32 我是奇数行
    33 12 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    34 我是奇数行
    35 14 abrt:x:173:173::/etc/abrt:/sbin/nologin
    36 我是奇数行
    37 16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    38 我是奇数行
    39 18 test2:x:1001:1001::/home/test2:/bin/bash
    40 我是空行
    View Code

    10、BEGIN { 初始化某些变量 } { 根据初始化的变量执行语句 } END { 结束之后执行的语句 } 

    语句说明:BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。

    [root@WT data]# wc -l test.txt 
    19 test.txt
    [root@WT data]# awk 'BEGIN{i=1}{i+=1}END{print i}' test.txt 
    20

    12、while循环

    例子说明:让演示文本每行语句输出两次

     1 [root@WT data]# awk '{i=1;while(i<=2){print $0;i+=1}}' test.txt 
     2 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     3 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     4 halt:x:7:0:halt:/sbin:/sbin/halt
     5 halt:x:7:0:halt:/sbin:/sbin/halt
     6 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
     7 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
     8 operator:x:11:0:operator:/root:/sbin/nologin
     9 operator:x:11:0:operator:/root:/sbin/nologin
    10 games:x:12:100:games:/usr/games:/sbin/nologin
    11 games:x:12:100:games:/usr/games:/sbin/nologin
    12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    14 ntp:x:38:38::/etc/ntp:/sbin/nologin
    15 ntp:x:38:38::/etc/ntp:/sbin/nologin
    16 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    17 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    18 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    19 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    20 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    21 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    22 dbus:x:81:81:System message bus:/:/sbin/nologin
    23 dbus:x:81:81:System message bus:/:/sbin/nologin
    24 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    25 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    26 nobody:x:99:99:Nobody:/:/sbin/nologin
    27 nobody:x:99:99:Nobody:/:/sbin/nologin
    28 abrt:x:173:173::/etc/abrt:/sbin/nologin
    29 abrt:x:173:173::/etc/abrt:/sbin/nologin
    30 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    31 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    32 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    33 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    34 wt:x:1000:1000:wt:/home/wt:/bin/bash
    35 wt:x:1000:1000:wt:/home/wt:/bin/bash
    36 test2:x:1001:1001::/home/test2:/bin/bash
    37 test2:x:1001:1001::/home/test2:/bin/bash
    View Code

    13、do-while循环

     1 [root@WT data]# awk '{i=1;do{print $0;i+=1}while(i<1)}' test.txt 
     2 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     3 halt:x:7:0:halt:/sbin:/sbin/halt
     4 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
     5 operator:x:11:0:operator:/root:/sbin/nologin
     6 games:x:12:100:games:/usr/games:/sbin/nologin
     7 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
     8 ntp:x:38:38::/etc/ntp:/sbin/nologin
     9 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    10 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    11 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    12 dbus:x:81:81:System message bus:/:/sbin/nologin
    13 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    14 nobody:x:99:99:Nobody:/:/sbin/nologin
    15 abrt:x:173:173::/etc/abrt:/sbin/nologin
    16 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    17 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    18 wt:x:1000:1000:wt:/home/wt:/bin/bash
    19 test2:x:1001:1001::/home/test2:/bin/bash
    View Code

    14、RS的使用

      1 [root@WT data]# awk 'BEGIN{RS=":"}{print $0}' test.txt 
      2 shutdown
      3 x
      4 6
      5 0
      6 shutdown
      7 /sbin
      8 /sbin/shutdown
      9 halt
     10 x
     11 7
     12 0
     13 halt
     14 /sbin
     15 /sbin/halt
     16 mail
     17 x
     18 8
     19 12
     20 mail
     21 /var/spool/mail
     22 /sbin/nologin
     23 operator
     24 x
     25 11
     26 0
     27 operator
     28 /root
     29 /sbin/nologin
     30 games
     31 x
     32 12
     33 100
     34 games
     35 /usr/games
     36 /sbin/nologin
     37 ftp
     38 x
     39 14
     40 50
     41 FTP User
     42 /var/ftp
     43 /sbin/nologin
     44 ntp
     45 x
     46 38
     47 38
     48 
     49 /etc/ntp
     50 /sbin/nologin
     51 apache
     52 x
     53 48
     54 48
     55 Apache
     56 /usr/share/httpd
     57 /sbin/nologin
     58 tss
     59 x
     60 59
     61 59
     62 Account used by the trousers package to sandbox the tcsd daemon
     63 /dev/null
     64 /sbin/nologin
     65 sshd
     66 x
     67 74
     68 74
     69 Privilege-separated SSH
     70 /var/empty/sshd
     71 /sbin/nologin
     72 dbus
     73 x
     74 81
     75 81
     76 System message bus
     77 /
     78 /sbin/nologin
     79 postfix
     80 x
     81 89
     82 89
     83 
     84 /var/spool/postfix
     85 /sbin/nologin
     86 nobody
     87 x
     88 99
     89 99
     90 Nobody
     91 /
     92 /sbin/nologin
     93 abrt
     94 x
     95 173
     96 173
     97 
     98 /etc/abrt
     99 /sbin/nologin
    100 systemd-network
    101 x
    102 192
    103 192
    104 systemd Network Management
    105 /
    106 /sbin/nologin
    107 polkitd
    108 x
    109 999
    110 998
    111 User for polkitd
    112 /
    113 /sbin/nologin
    114 wt
    115 x
    116 1000
    117 1000
    118 wt
    119 /home/wt
    120 /bin/bash
    121 test2
    122 x
    123 1001
    124 1001
    125 
    126 /home/test2
    127 /bin/bash
    View Code

    15、ORS的使用

     1 [root@WT data]# cat test.txt 
     2 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     3 halt:x:7:0:halt:/sbin:/sbin/halt
     4 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
     5 operator:x:11:0:operator:/root:/sbin/nologin
     6 games:x:12:100:games:/usr/games:/sbin/nologin
     7 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
     8 ntp:x:38:38::/etc/ntp:/sbin/nologin
     9 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    10 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    11 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    12 dbus:x:81:81:System message bus:/:/sbin/nologin
    13 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    14 nobody:x:99:99:Nobody:/:/sbin/nologin
    15 abrt:x:173:173::/etc/abrt:/sbin/nologin
    16 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    17 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    18 wt:x:1000:1000:wt:/home/wt:/bin/bash
    19 test2:x:1001:1001::/home/test2:/bin/bash
    20 
    21 [root@WT data]# awk 'BEGIN{ORS="="}{print $0}' test.txt 
    22 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown=halt:x:7:0:halt:/sbin:/sbin/halt=mail:x:8:12:mail:/var/spool/mail:/sbin/nologin=operator:x:11:0:operator:/root:/sbin/nologin=games:x:12:100:games:/usr/games:/sbin/nologin=ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin=ntp:x:38:38::/etc/ntp:/sbin/nologin=apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin=tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin=sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin=dbus:x:81:81:System message bus:/:/sbin/nologin=postfix:x:89:89::/var/spool/postfix:/sbin/nologin=nobody:x:99:99:Nobody:/:/sbin/nologin=abrt:x:173:173::/etc/abrt:/sbin/nologin=systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin=polkitd:x:999:998:User for polkitd:/:/sbin/nologin=wt:x:1000:1000:wt:/home/wt:/bin/bash=test2:x:1001:1001::/home/test2:/bin/bash==
    View Code

    16、FS的使用

     1 [root@WT data]# awk 'BEGIN{FS=":"}{print $1}' test.txt 
     2 shutdown
     3 halt
     4 mail
     5 operator
     6 games
     7 ftp
     8 ntp
     9 apache
    10 tss
    11 sshd
    12 dbus
    13 postfix
    14 nobody
    15 abrt
    16 systemd-network
    17 polkitd
    18 wt
    19 test2
    View Code

    17、OFS的使用

    1 [root@WT data]# echo "1 2"|awk 'BEGIN{OFS="&"}{$1=$1;print $0}'
    2 1&2

    18、for循环的使用

    格式:

    for(初始表达式;终止条件;步长表达式)
    {语句}

    例子说明:把演示文本的每行语句输出两次

     1 [root@WT data]# awk '{for(i=0;i<2;i++){print $0}}' test.txt 
     2 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     3 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     4 halt:x:7:0:halt:/sbin:/sbin/halt
     5 halt:x:7:0:halt:/sbin:/sbin/halt
     6 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
     7 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
     8 operator:x:11:0:operator:/root:/sbin/nologin
     9 operator:x:11:0:operator:/root:/sbin/nologin
    10 games:x:12:100:games:/usr/games:/sbin/nologin
    11 games:x:12:100:games:/usr/games:/sbin/nologin
    12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    14 ntp:x:38:38::/etc/ntp:/sbin/nologin
    15 ntp:x:38:38::/etc/ntp:/sbin/nologin
    16 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    17 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    18 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    19 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    20 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    21 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    22 dbus:x:81:81:System message bus:/:/sbin/nologin
    23 dbus:x:81:81:System message bus:/:/sbin/nologin
    24 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    25 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    26 nobody:x:99:99:Nobody:/:/sbin/nologin
    27 nobody:x:99:99:Nobody:/:/sbin/nologin
    28 abrt:x:173:173::/etc/abrt:/sbin/nologin
    29 abrt:x:173:173::/etc/abrt:/sbin/nologin
    30 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    31 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    32 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    33 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    34 wt:x:1000:1000:wt:/home/wt:/bin/bash
    35 wt:x:1000:1000:wt:/home/wt:/bin/bash
    36 test2:x:1001:1001::/home/test2:/bin/bash
    37 test2:x:1001:1001::/home/test2:/bin/bash
    View Code

     19、AWK的数组使用

    #awk数组简单使用

    1 [root@WT ~]# awk 'BEGIN{arr[0]="hello world";arr[1]="hello world2";for(i in arr)print arr[i]}'
    2 hello world
    3 hello world2
    4 [root@WT ~]# awk 'BEGIN{arr[0]="hello world";arr[1]="hello world2";for(i=0;i<length(arr);i++)print arr[i]}'
    5 hello world
    6 hello world2

    #统计IP数量

     1 [root@WT data]# cat test2.txt 
     2 10.0.0.5
     3 10.0.0.2
     4 10.0.0.2
     5 10.0.0.1
     6 10.0.0.3
     7 10.0.0.4
     8 10.0.0.5
     9 10.0.0.8
    10 10.0.0.7
    11 10.0.0.4
    12 10.0.0.6
    13 10.0.0.19
    14 10.0.0.1
    15 10.0.0.1
    16 [root@WT data]# awk '{arr[$1]++} END {for(key in arr) print arr[key],key}' test2.txt |sort -nr
    17 3 10.0.0.1
    18 2 10.0.0.5
    19 2 10.0.0.4
    20 2 10.0.0.2
    21 1 10.0.0.8
    22 1 10.0.0.7
    23 1 10.0.0.6
    24 1 10.0.0.3
    25 1 10.0.0.19
    View Code
  • 相关阅读:
    css权重
    面试题目之 怪异模式和严格模式
    写点东西,以便回忆-2014最后一天,安好
    background-position 用法详细介绍
    css样式自动换行/强制换行
    浏览器兼容之Chrome浏览器: -webkit-text-size-adjust: none;
    html5常用基本标签
    css样式编辑
    Bootstrap 基本用法(续)
    Bootstrap 基本用法
  • 原文地址:https://www.cnblogs.com/wutao666/p/9732976.html
Copyright © 2011-2022 走看看