zoukankan      html  css  js  c++  java
  • awk工具

            AWK是一个优良的文本处理工具,LinuxUnix环境中现有的功能最强大的数据处理引擎之一,以Aho、Weinberger、Kernighan三位发明者名字首字母命名为AWK,AWK是一个行级文本高效处理工具,AWK经过改进生成的新的版本有Nawk、Gawk,一般Linux默认为Gawk,Gawk是 AWK的GNU开源免费版本。

             AWK基本原理是逐行处理文件中的数据,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤,如果找不到匹配内容,则继续处理下一行。

    1)AWK基本语法参数详解:

    awk    'pattern   +   {action}'     file

          单引号' '是为了和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

    6)常用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
  • 相关阅读:
    SharePoint 2010 User Profile Sync Service自动停止
    如何区别多个svchost.exe?
    Log Parser分析IIS log的一个简单例子
    Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
    Windows中右键点击文件夹, 结果找不到共享选项卡, 怎么办?
    介绍SOS中的SaveModule命令
    SharePoint中Draft版本的文档不会收到document added的Alert Email
    和我一起学Windows Workflow Foundation(1)创建和调试一个WF实例
    门户网站
    C#基础—— check、lock、using语句归纳
  • 原文地址:https://www.cnblogs.com/deny/p/10000910.html
Copyright © 2011-2022 走看看