awk命令

  1. awk命令用于Linux下的文本处理。数据可以来自文件或标准输入,支持正则表达式等功能,是Linux下强大的文本处理工具。

    示例

    #$1与$3相连输出,不分隔
    [root@localhost ~]# awk -F ":" '{print $1 $3}' /etc/passwd 
    #多了一个逗号,$1与$3使用空格分隔
    [root@localhost ~]# awk -F ":" '{print $1,$3}' /etc/passwd 
    #显示每行有多少字段
    [root@localhost ~]# awk -F: '{print NF}' /etc/passwd  
    #将每行第NF个字段的值打印出来
    [root@localhost ~]# awk -F: '{print $NF}' /etc/passwd  
    #依次打印行号,字段数,最后字段值,制表符,每行内容
    [root@localhost ~]# awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd
    #显示第5行
    [root@localhost ~]# awk -F: 'NR==5{print}' /etc/passwd
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    显示第5行和第6行
    [root@localhost ~]# awk -F: 'NR==5 || NR==6{print}' /etc/passwd     
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    #纯字符匹配
    [root@localhost ~]# awk '/mysql/' /etc/passwd
    mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin
    #不匹配mysql的行
    [root@localhost ~]# awk '!/mysql/' /etc/passwd
    #匹配区间
    [root@localhost ~]# awk -F: '/mail/,/mysql/{print}' /etc/passwd
    #匹配包含27为数字开头的行,如27,277,2777...
    [root@localhost ~]# awk -F: '/[2][7][7]*/{print $0}' /etc/passwd
    #匹配指定内容才显示
    [root@localhost ~]# awk -F: '$1~/mail/{print $1}' /etc/passwd
    mail

    参数说明

    -F指定分隔符
    //匹配代码块
    !//纯字符不匹配
    ~//字段值匹配
    !~//字段值不匹配
    ~/a1|a2/字段值匹配a1或a2
    条件表达式 == != > >=
    逻辑运算符 && ||