Linux-awk

作者: ssttIsme | 来源:发表于2023-05-05 12:53 被阅读0次

    文本分析工具, 把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
    awk实际上是gawk

    [server@hadoop102 scripts]$ which awk
    /usr/bin/awk
    [server@hadoop102 scripts]$ ll /usr/bin |grep awk
    lrwxrwxrwx.   1 root root            4 7月  17 2021 awk -> gawk
    -rwxr-xr-x.   1 root root       514168 6月  29 2017 dgawk
    -rwxr-xr-x.   1 root root       428584 6月  29 2017 gawk
    -rwxr-xr-x.   1 root root         3188 6月  29 2017 igawk
    -rwxr-xr-x.   1 root root       428672 6月  29 2017 pgawk
    

    awk [选项参数] '/pattern1/{action1} /pattern2/{action2} ' 文件名
    pattern:表示awk在数据中查找的内容,就是匹配模式
    action:找到匹配内容时执行的一系列命令

    选项参数说明

    选项参数 功能
    -F 指定输入文件分隔符
    -v 赋值一个用户自定义变量

    查找pd文件以root关键字开头的所有行,并输出行的第7列

    [root@hadoop102 pd]# cat pd|grep ^root|cut -d ":" -f 7
    /bin/bash
    
    [root@hadoop102 pd]# cat pd|awk -F ":" '/^root/{print $7}'
    /bin/bash
    

    查找pd文件以root关键字开头的所有行,并输出行的第1列和7列,中间以,分割

    [root@hadoop102 pd]# cat pd|awk -F ":" '/^root/{print $1","$7}'
    root,/bin/bash
    

    查找pd文件以root关键字开头的所有行,并输出行的第1、6、7列,中间以,分割

    [root@hadoop102 pd]# cat pd|awk -F ":" '/^root/{print $1","$6","$7}'
    root,/root,/bin/bash
    

    只显示pd文件的第一列和第七列,以逗号分给,且在所有行前面添加列名user,shell在最后一行添加“end of file”

    [root@hadoop102 pd]# cat pd|awk -F ":" 'BEGIN{print "user,shell"}{print $1","$7}END{print "end of file"}'
    user,shell
    root,/bin/bash
    bin,/sbin/nologin
    daemon,/sbin/nologin
    adm,/sbin/nologin
    lp,/sbin/nologin
    sync,/bin/sync
    shutdown,/sbin/shutdown
    halt,/sbin/halt
    mail,/sbin/nologin
    operator,/sbin/nologin
    games,/sbin/nologin
    ftp,/sbin/nologin
    nobody,/sbin/nologin
    systemd-network,/sbin/nologin
    dbus,/sbin/nologin
    polkitd,/sbin/nologin
    libstoragemgmt,/sbin/nologin
    colord,/sbin/nologin
    rpc,/sbin/nologin
    gluster,/sbin/nologin
    saslauth,/sbin/nologin
    abrt,/sbin/nologin
    rtkit,/sbin/nologin
    pulse,/sbin/nologin
    radvd,/sbin/nologin
    rpcuser,/sbin/nologin
    nfsnobody,/sbin/nologin
    unbound,/sbin/nologin
    chrony,/sbin/nologin
    qemu,/sbin/nologin
    tss,/sbin/nologin
    usbmuxd,/sbin/nologin
    geoclue,/sbin/nologin
    ntp,/sbin/nologin
    sssd,/sbin/nologin
    setroubleshoot,/sbin/nologin
    saned,/sbin/nologin
    gdm,/sbin/nologin
    gnome-initial-setup,/sbin/nologin
    sshd,/sbin/nologin
    avahi,/sbin/nologin
    postfix,/sbin/nologin
    tcpdump,/sbin/nologin
    server,/bin/bash
    mysql,/bin/false
    end of file
    

    将pd文件中的用户id增加数值1并输出

    [root@hadoop102 pd]# cat pd |awk -v i=0 -F ":" '{print $3+i}' 
    0
    1
    2
    3
    4
    5
    6
    7
    8
    11
    12
    14
    99
    192
    81
    999
    998
    997
    32
    996
    995
    173
    172
    171
    75
    29
    65534
    994
    993
    107
    59
    113
    992
    38
    991
    990
    989
    42
    988
    74
    70
    89
    72
    1000
    27
    

    awk内置变量

    变量 说明
    FILENAME 文件名
    NR 已读的记录数(行号)
    NF 浏览记录的域的个数(切割后,列的个数)

    统计pd文件名,每行的行号,每行的列数

    [root@hadoop102 pd]# awk -F ":" '{print "文件名:"FILENAME"行号:"NR "列数:"NF}' pd    
    文件名:pd行号:1列数:7
    文件名:pd行号:2列数:7
    文件名:pd行号:3列数:7
    文件名:pd行号:4列数:7
    文件名:pd行号:5列数:7
    文件名:pd行号:6列数:7
    文件名:pd行号:7列数:7
    文件名:pd行号:8列数:7
    文件名:pd行号:9列数:7
    文件名:pd行号:10列数:7
    文件名:pd行号:11列数:7
    文件名:pd行号:12列数:7
    文件名:pd行号:13列数:7
    文件名:pd行号:14列数:7
    文件名:pd行号:15列数:7
    文件名:pd行号:16列数:7
    文件名:pd行号:17列数:7
    文件名:pd行号:18列数:7
    文件名:pd行号:19列数:7
    文件名:pd行号:20列数:7
    文件名:pd行号:21列数:7
    文件名:pd行号:22列数:7
    文件名:pd行号:23列数:7
    文件名:pd行号:24列数:7
    文件名:pd行号:25列数:7
    文件名:pd行号:26列数:7
    文件名:pd行号:27列数:7
    文件名:pd行号:28列数:7
    文件名:pd行号:29列数:7
    文件名:pd行号:30列数:7
    文件名:pd行号:31列数:7
    文件名:pd行号:32列数:7
    文件名:pd行号:33列数:7
    文件名:pd行号:34列数:7
    文件名:pd行号:35列数:7
    文件名:pd行号:36列数:7
    文件名:pd行号:37列数:7
    文件名:pd行号:38列数:7
    文件名:pd行号:39列数:7
    文件名:pd行号:40列数:7
    文件名:pd行号:41列数:7
    文件名:pd行号:42列数:7
    文件名:pd行号:43列数:7
    文件名:pd行号:44列数:7
    文件名:pd行号:45列数:7
    

    输出文件中的空行所在的行号

    [root@hadoop102 pd]# ifconfig |awk '/^$/{print NR}'
    9
    17
    26
    35
    44
    52
    60
    68
    [root@hadoop102 pd]# ifconfig |awk '/^$/{print "空行:" NR}'
    空行:9
    空行:17
    空行:26
    空行:35
    空行:44
    空行:52
    空行:60
    空行:68
    

    切割IP

    [root@hadoop102 pd]# ifconfig ens33|awk '/netmask/{print $2}'
    192.168.100.102
    
    [root@hadoop102 pd]# ifconfig ens33 |grep netmask|cut -d " " -f 10
    192.168.100.102
    

    相关文章

      网友评论

          本文标题:Linux-awk

          本文链接:https://www.haomeiwen.com/subject/vczfsdtx.html