zoukankan      html  css  js  c++  java
  • awk命令

    awk  根据定位到到数据行处理其中到分段,用于数据切片

    awk 'BEGIN{}END{}' # 开始和结束

    awk '/Running/'  # 正则匹配

    awk '/aaa/,/bbb/' # 区间选择

    awk '$2~/xx/'  # 字段匹配

    awk 'NR==2'   # 取第二行

    awk 'NR>1'  # 去掉第一行

    '$9~/500/' /tmp/nginx.log  #默认以空格为分隔符,匹配第九位数据500

    awk '$9!~/200/' /tmp/nginx.log # 匹配第九位状态码非200的数据

    awk 字段数据处理

    -F 参数指定字段分隔符

    RS  行记录分隔符

    FS  字段分隔符

    NR  记录数

    NF   字段数

    BEGIN{FS="_"} 也可以表示分隔符

    $0 代表原来的行‘

    $1 代表第一个字段

    $N 代表第N个字段

    $NF 代表最后一个字段

    $ cat file1
    a
    b
    c
    
    $ cat file2
    d
    e
    
    $ awk '{print FILENAME, NR, FNR, $0}' file1 file2
    file1 1 1 a
    file1 2 2 b
    file1 3 3 c
    file2 4 1 d
    file2 5 2 e

    awk '$9!~/200/{print $9}' /tmp/nginx.log  找出第九个字段不等于状态码为200的字段,并打印出来

    awk '$9!~/200/{print $9}' /tmp/nginx.log |sort | uniq -c 找出符合条件的字段后,进行排序去重

    awk '$9=="404"' /tmp/nginx.log   # 只查询符合条件的结果

    seq 10 | awk '/^..$/'
    10

    seq 10 | awk '/^3$/'
    3

    seq 20 | awk '/15/,/19/'
    15
    16
    17
    18
    19

    seq 20 | awk 'NR==8'  打出行数
    8

    综合运用:

    前1000行数据,在log日志中找出访问量最高的IP地址

    head -1000 /tmp/nginx.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -5

    awk '/00:00:01/,/00:00:09/' /tmp/nginx.log 打出1-9之间的数据

    awk '$9!~/200/{print $7}' /tmp/nginx.log |sort | uniq -c | sort -nr| less 查找排序去重并打印行数    -c 参数显示文件中每行连续出现的次数

    awk '$9!~/200/{print $7}' /tmp/nginx.log | sed -E 's/[0-9]{3,}/_d_/g' |sort | uniq -c | sort -nr| less   # sed -E 's/[0-9]{3,}/_d_/g' 正则替换0-9并3位以上的数据替换为_d_,g为全部替换

    awk '$9!/200/{print $7}' /tmp/nginx.log | sed -E 's/[0-9]{3,}/_d_/g' | sort| uniq -c | sort -nr | head -5   取出前5的数据

    echo "123|456|789" | awk -F '|' '{print $0}   -F指定分隔符,不指定分隔符时,默认以空格作为分隔符   打印的结果为:123|456|789   $0代表全域(范围)

    echo "123|456|789" | awk -F '|' '{print $1}'  打印的结果为:123   $1代表第一个域(范围)

    echo "123+456_789" | awk -F '+|_' '{print $2}'  这里的|是或的意思,以+或-为分隔符的意思

    last -n 5 显示当前5个用户

    last -n 10 | awk '{print $1}' 打印第一排的ID

    cat passwd | awk -F ':' '{print $1}'    以:为分隔符打印第一列数据

    cat passwd | awk -F ':' '{print $1 " "$7}'

    curl -s http://www.baidu.com/s?wd=mp3 | grep -o "结果约[0-9,]*" | awk -F '个|约' '{print $2}'  打印的结果为:64,300,000   以个或约作为分隔符

    echo -e "1|2|3 4|5|6 7|8|9" | awk -F '|' 'BEGIN{a=0}{a=a+$2}END{print a}'
    结果为:15,即每一列的第二位数相加2+5+8

    echo -e "1|2|3 4|5|6 7|8|9" | awk -F '|' 'BEGIN{a=0}{a=a+$2;print $2}END{print a}'

    输出的结果为:
    2
    5
    8
    15

  • 相关阅读:
    【重要】关于WEBSERVICE的远程访问问题
    【系统】windows2003 至少有一个服务或驱动程序无法加载或错误
    【总结】IE6、IE7、IE8、Firefox、Opera CSS hack区分
    【总结】DIV+CSS有可能遇到的问题
    【精华】Asp优化之缓存技术
    【总结】ASP字符串转换函数用法
    【重要】条形码原理39码和EAN13码
    【精华】教你如何制作无人值守安装Win XP系统盘
    【原创】解决IE8下minheight值使bottom:0px失效的方法
    【手机】Windows Mobile手机软件安装卸载方法
  • 原文地址:https://www.cnblogs.com/godlove/p/11479909.html
Copyright © 2011-2022 走看看