awk

Posted

tags:

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

  • awk 数据过滤软件[统计功能]
  • awk 逐行处理软件
  • 类似于grep #grep[过滤一整行]
  • 语法格式

    awk [选项] ‘条件{指令}‘ 文件
    条件可以没有 如果没有条件代表所有条件
    指令也可以没有 没有指令即打印整行
    不能既没有条件 也没有指令
    选项
    -F 指定分隔符
    awk 默认使用空格或tab作为分隔符号
    awk -F: ‘{print $1}‘ /etc/passwd
    awk -F: ‘{print $1,$3,$7}‘ /etc/passwd
    #中间以逗号分隔 可以一次打多列
    print $0 整行
    print $1 第一列
    print NR 当前行的行号
    print NF 当前行的列数
    ]# awk -F: ‘{print NR}‘ /etc/passwd
    ]# awk -F: ‘{print NF}‘ /etc/passwd
    ]# awk -F: ‘{print NF}‘ /etc/passwd

    awk 可以打印常量 (字符串需要引号)

    awk 完整命令格式

    awk ‘BEGIN{} 条件{} END{}‘ 文件
    所有指令都需要放在{}里
    BEGIN{} 里的指令 读文件之前 执行一次
    中间的 {} 里的指令 在读取文件过程中执行 执行N次
    END{} 里的指令 是在读取文件之后 执行一次

    只写BEGIN{} 后面可以不加文件
    [[email protected] ~]# awk ‘BEGIN{x=0} /nologin$/{x++} END{print x}‘ /etc/passwd
    awk 变量可以不定义 就直接用
    ]# awk ‘/nologin$/{x++} END{print x}‘ /etc/passwd

    条件

    1/正则/ #默认支持扩展正则
    #awk ‘/root/‘ /etc/passwd #全行匹配
    #awk -F: ‘$1~/root/‘ /etc/passwd #仅对第一列匹配
    ~匹配
    !~ 不匹配(取反)
    ]# awk -F: ‘$7!~/bash$/‘ /etc/passwd

    #正则 是模糊匹配

    2 字串和数字比较 == != < <= > >=

    ]# awk -F: ‘$1=="root" {print $3}‘ /etc/passwd
    ]# awk -F: ‘$3<=10‘ /etc/passwd

    #注意 字串一定要用引号引起来
    #精确匹配

    3 逻辑判断 && ||

    awk -F: ‘$3>10 && $3<20‘ /etc/passwd
    awk -F: ‘$3==0 || $3==1000‘ /etc/passwd

    4 算术运算

    能被7整除或者包含7的数 1-200
    seq 200 | awk ‘$1%7==0||$1~/7/‘

    #天然支持小数运算

    5 if 语句

    if(判断){指令}
    if(判断){指令}else{指令}
    if(判断){指令}elif(判断){指令}
    awk ‘BEING{} 条件{} end{}‘ 文件

    统计系统用户和普通用户分别是多少 即UID是否大于1000
    ]# awk -F: ‘BEGIN{i=0;j=0}{if($3<=1000){i++}else{j++}}END{print i,j}‘ /etc/passwd

    6 while

    统计词频
    判断文件/etc/passwd中 root出现了多少次
    awk -F: ‘{命令} END{}‘ /etc/passwd
    i=1;while(i<=NF){if($i~/root/){x++};i++}
    ]# awk -F: ‘{i=1;while(i<=NF){if($i~/root/){x++};i++}} END{print x}‘ /etc/passwd

    7 实例

    awk 公式
    #awk ‘{IP[$1]++}END{for(i in IP){print i,IP[i]}}‘
    #公式中 除了$1 其他均无需变动

    ]# awk ‘BEGIN{x[0]=11;x[1]=22 ;print x[0],x[1]}‘
    ]# ab -c 100 -n 10000 http://172.25.0.11/
    模拟100个人,同时访问网站
    点击页面1w次

    拒绝服务攻击Dos攻击

    统计每个IP的访问次数,如果次数大于五百次
    ]# awk ‘{IP[$1]++}END{for(i in IP){print i"访问了"IP[i]"次"}}‘ /var/log/httpd/access_log
    ]# awk ‘{IP[$1]++}END{for(i in IP){print i,IP[i]}}‘ /var/log/httpd/access_log | awk ‘$2>=500{print $1}‘

    ]# awk ‘/Failed password/{print $11}‘ /var/log/secure
    ]# awk ‘/Failed password/{print $11}‘ /var/log/secure | uniq -c
    过滤ssh失败的用户的IP
    分区剩余容量 df
    内存剩余容量 free
    cpu负载 top uptime
    top - 09:39:46 up 23 min, 2 users, load average: 0.00, 0.01, 0.10
    一分钟 五分钟 十五分钟
    根据cpu的内核数量 双核 2 即代表100%的状态运行
    1 即代表50%运行
    load average 的值取决于cpu的核心
    网卡流量 ifconfig

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

    AWK

    AWK用法详解

    linux awk

    Linux-AWK

    新awk整理

    awk编程