• 三剑客之awk


    工作模式 逐行读取
    awk 'BEGIN{print "hello"} {print "ok"} END {print "word"}' /etc/passwd
    BEGIN 读取文件之前做的操作
    print ok 逐行读取文件 每一行打印一个ok
    END 读取文件之后做的操作

    1 查

    1.1)打印整列信息 -F 是指定分隔符

    [root@famous-machine-1 ~]# awk -F: '{print $1}' /etc/passwd
    root
    bin
    

    1.2)匹配到木一行 打印某一列信息

    [root@famous-machine-1 ~]# awk -F: '/^root/{print $1}' /etc/passwd
    root
    

    1.3)指定某一行 打印指定列信息

    [root@famous-machine-1 ~]# awk -F: 'NR==3{print $1}' /etc/passwd
    daemon
    

    1.4)同时打印多个信息 指定分隔符

    [root@famous-machine-1 ~]# awk '/guojing/{print $1,$2}' 1.txt 
    guojing 85
    [root@famous-machine-1 ~]# awk '/guojing/{print $1" "$2}' 1.txt 
    guojing 85
    [root@famous-machine-1 ~]# awk '/guojing/{print $1"!"$2}' 1.txt 
    guojing!85
    [root@famous-machine-1 ~]# awk '/guojing/{print $1","$2}' 1.txt 
    guojing,85
    

    1.5)指定列 匹配条件 PS: 第四列匹配以数字9开头的行 打印第一和第四列

    [root@famous-machine-1 ~]# awk '$4~/^9/{print $1,$4}' awk_test.txt 
    guanyu 90
    [root@famous-machine-1 ~]# awk '$4~/8$|9$/{print $1,$4}' awk_test.txt 
    guojing 78
    liubei 79 
    

    1.6)打印最后一列的信息

    [root@famous-machine-1 ~]#  awk '{print $NF}' 1.txt 
    78
    75
    [root@famous-machine-1 ~]#  awk '{print $(NF-1)}' 1.txt 
    92
    90
    
    awk /内容/ 匹配查找内容
    [root@rongbiz002 26]# awk  '/^root/' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    

    2.改

    [root@famous-machine-1 ~]# cat test.txt 
    df sdf 312:4234:432
    [root@famous-machine-1 ~]# awk '{gsub(/:/,"~",$3);print $3}' test.txt 
    312~4234~432
    

    3.awk 数组

    3.1)定义数组

    [root@RainGod ~]# awk 'BEGIN{h[1]="rongbiz.com";h[2]="rongbiz.cn";h[3]="rongbiz.net";print h[1]" and "h[2]" and "h[3]}'
    rongbiz.com and rongbiz.cn and rongbiz.net
    

    3.2)把ip定义成数组索引 遍历索引 打印次数 及ip

    [root@rongbiz002 wwwlogs]# awk '{ip[$1]++}END{for(i in ip) print i,ip[i]}' www.rongbiz.com-access_log |sort -rnk2|head|column -t
    222.173.94.214  10019
    123.185.2.140   5703
    120.55.93.127   5231
    101.200.61.138  4022
    49.74.23.185    1594
    49.74.3.102     1544
    

    4.awk条件判断

    [root@RainGod ~]# awk -F: '{if($3==0){i++}else if($3>0&&$3<1000){j++} else {k++}}END{print "管理员:" i  "系统用户:" j "管理员:" k}' /etc/passwd
    管理员:1系统用户:25管理员:2
    
  • 相关阅读:
    [React]核心概念
    [算法]复杂度分析
    [算法]移除指定元素&strSr()的实现
    [算法]合并链表&删除数组重复项
    php _weakup()反序列化漏洞
    Java 注解详解
    MyBatis入门
    Spring 事务管理
    Spring AOP
    Spring JDBC
  • 原文地址:https://www.cnblogs.com/yangtao416/p/14455230.html
Copyright © 2020-2023  润新知