zoukankan      html  css  js  c++  java
  • 编程四剑客awk

    awk  'pattern +{action}' file

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

    a:单引号 ''是为了和shell命令区分开;

    b:大括号{}表示一个命令分组;

    c:pattern 是一个过滤器,表示匹配pattern条件的行才行Action处理;

    d:action是处理动作,常见动作为print;

    e:使用#作为注释,pattern和action可以只有其一,但不能两者都没有。

    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

    常用工具演练:

    (1)           AWK打印硬盘设备名称,默认以空格为分割:

                             df -h|awk '{print $1}'

    (2)           AWK以空格、冒号、 、分号为分割:

                             awk -F'[: ;]' '{print $1}' list.txt

    (3)           AWK以冒号分割,打印第一列,同时将内容追加到/tmp/awk.log下:

                         awk -F: '{print $1>>"/tmp/awk.log"}' list.txt

    (4)           打印list.txt文件中的第3行至第5行,NR表示打印行,$0表示文本所有域:

                             awk 'NR==3,NR==5  {print $0}'         list.txt

    (5)           打印l;ist.txt文件中的第3行至第5行的第一列与最后一列:

                            awk 'NR==3,NR==5 {print $1,$NF}' list.txt

    (6)           打印/etc/passwd文件中,长度大于80的行号:

                       awk   'length($0)>80 {print NR}'       /etc/passwd

    (7)           AWK引用Shell变量,使用-v或者双引号+单引号即可:

                      awk -v STR=hello '{print STR,$NF}' list.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指定文件list.txt第一列的总和   

                       cat    list.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

                    

    获取IP地址:

    ifconfig|awk '/cast/' |awk '{print $2}' |sed 's/add://g'

    ifconfig|awk '/cast/'|awk '{print $2}' |awk -F: '{print $NF}'

    显示用户名

    awk -F: '{print $1}' passwd

    打印第三行到第六行并显示行号

    awk 'NR>=3&&NR<=6 {print NR,$0}' passwd

    打印硬盘分区

    df -h|awk 'NR>1 {print $NF,(NF-1)}'

    awk  '{print $0}' list.txt'|sed 's/ / /g'|grep -v "^$" 

    数字列表取最大最小值

    awk '{print $0}' list.txt|sed 's/ / g'|awk "! ^$"|sort -nr|sed -n "1p;$p"

    打印第一列和最后一列

    df -h|awk '{print $1" "$NF}'

  • 相关阅读:
    3.流程控制语句
    pandas数据处理(一)pymongo数据库量大插入时去重速度慢
    windows下载安装redis
    Scrapy(一)爬知乎所有用户信息
    Mongodb去除重复的数据,pymongo去重
    selenium爬虫报错:Message: stale element reference: element is not attached to the page document 促成1分钟爬完斗鱼主播信息。
    用pyspider爬斗鱼主播信息
    曼城新闻情报站(二)Django框架的爬虫
    曼城新闻情报站(一)爬取3大网站的曼城新闻
    Beautiful Soup多线程爬取斗鱼所有主播信息(改良版)
  • 原文地址:https://www.cnblogs.com/legenidongma/p/10408357.html
Copyright © 2011-2022 走看看