• SHELL用法九(awk练习)


    1、SHELL编程Awk语句案例实战
    Awk主要是用于对文本文件进行处理,通常是逐行处理,其语法参数格式为,
    AWK常用参数、变量、函数详解如下:
    awk  'pattern + {action}' file
    (1) AWK基本语法参数详解:
    单引号''是为了和shell命令区分开;
    大括号{ }表示一个命令分组;
    pattern是一个过滤器,表示匹配pattern条件的行才进行Action处理;
    action是处理动作,常见动作为Print;
    使用#作为注释,pattern和action可以只有其一,但不能两者都没有。
    (2) AWK内置变量详解:
    FS 分隔符,默认是空格;
    OFS 输出分隔符;
    NR 当前行数,从1开始;
    NF 当前记录字段个数;
    $0 当前记录;
    $1~$n 当前记录第n个字段(列)。
    (3) AWK内置函数详解:
    gsub(r,s):在$0中用s代替r;
    index(s,t):返回s中t的第一个位置;
    length(s):s的长度; match(s,r):s是否匹配r;
    split(s,a,fs):在fs上将s分成序列a;
    substr(s,p):返回s从p开始的子串。
    (4) AWK常用操作符,运算符及判断符:
    ++ --
    增加与减少( 前置或后置);
    ^ **
    指数( 右结合性);
    ! + -
    非、一元(unary) 加号、一元减号;
    + - * / %
    加、减、乘、除、余数;
    < <= == != > >=
    数字比较;
    &&
    逻辑and;
    ||
    逻辑or;
    = += -= *= /= %= ^= **=
    赋值。
    (5) AWK与流程控制语句:
    if(condition) { } else { };
    while { };
    do{ }while(condition);
    for(init;condition;step){ };
    break/continue。
    常用AWK工具企业演练案列:
    (1) AWK打印硬盘设备名称,默认以空格为分割:
    df -h|awk '{print $1}'
    (2) AWK以空格、冒号、 、分号为分割:
    awk -F '[ :	;]' '{print $1}'   jfedu.txt
    (3) AWK以冒号分割,打印第一列,同时将内容追加到/tmp/awk.log下:
    awk -F: '{print $1 >>"/tmp/awk.log"}' jfedu.txt
    (4) 打印jfedu.txt文件中的第3行至第5行,NR表示打印行,$0表示文本所有域:
    awk 'NR==3,NR==5 {print}'  jfedu.txt
    awk 'NR==3,NR==5 {print $0}' jfedu.txt
    (5) 打印jfedu.txt文件中的第3行至第5行的第一列与最后一列:
    awk 'NR==3,NR==5 {print $1,$NF}'  jfedu.txt
    (6) 打印jfedu.txt文件中,长度大于80的行号:
    awk 'length($0)>80 {print NR}'  jfedu.txt
    (7) AWK引用Shell变量,使用-v或者双引号+单引号即可:
    awk -v STR=hello '{print STR,$NF}'  jfedu.txt
    STR="hello";echo| awk '{print "'${STR}'";}'
    (8) AWK以冒号切割,打印第一列同时只显示前5行:
    cat /etc/passwd|head -5|awk -F: '{print $1}'
    awk -F: 'NR>=1&&NR<=5 {print $1}' /etc/passwd
    (9) Awk指定文件jfedu.txt第一列的总和:
    cat jfedu.txt |awk '{sum+=$1}END{print sum}'
    (10) AWK NR行号除以2余数为0则跳过该行,继续执行下一行,打印在屏幕:
    awk -F: 'NR%2==0 {next} {print NR,$1}' /etc/passwd
    (11) AWK添加自定义字符:
    ifconfig eth0|grep "Bcast"|awk '{print "ip_"$2}'
    (12) AWK与if组合实战,判断数字比较:
    echo 3 2 1 | awk '{ if(($1>$2)||($1>$3)) { print $2} else {print $1} }'
    (13) AWK与数组组合实战,统计passwd文件用户数:
    awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i =0; i < NR; i++) print i, name[i]}' /etc/passwd
    (14) awk分析Nginx访问日志的状态码404、502等错误信息页面,统计次数大于20的IP地址。
    awk '{if ($9~/502|499|500|503|404/) print $1,$9}' access.log|sort|uniq –c|sort –nr | awk '{if($1>20) print $2}'
    (15) Awk统计服务器状态连接数:
    netstat -an | awk '/tcp/ {s[$NF]++} END {for(a in s) {print a,s[a]}}'
    netstat -an | awk '/tcp/ {print $NF}' | sort | uniq -c
  • 相关阅读:
    单例模式 MonoState
    适配器模式+AutoFac
    复合模式 泛型检查
    复合模式
    OpenDaylight实验
    Open vSwitch
    Mininet入门实战
    Python基础语句学习
    修改用户密码登录期限
    springboot maven自定义jar包包名, 增加环境、时间版本号信息
  • 原文地址:https://www.cnblogs.com/nshgo/p/12158356.html
Copyright © 2020-2023  润新知