zoukankan      html  css  js  c++  java
  • shell语句记录-awk

     cat ./daily_uv/daily_uv_20140104 | awk '{fr[$1]+=$3; k=$1 "_" $2; av[k]+=$3;} END{for (k in fr) {print k,fr[k]} for (k in av) {print k,av[k]}}' 

    1.  最基本的用法

    awk '{print $1}' ./daily_messageEnter_uv/daily_messageEnter_uv_20131226

    即 awk '{*****}' filename

    2.  awk的格式化输出,和C语言的printf没什么两样

    如awk '{printf "%s %s", $1,$2}' ./filename

    注意!!!

    此时输出的效果与awk '{print $1}' 不同,1中的print会自动换行,但这里的printf如果不指定的话是连着输出的,输出方式:输出第一列的第一行,第二列的第一行,然后是第一列的第二行,第二列的第二行 ………………

    如果希望换行,那么:加上

    即awk '{printf "%s %s ", $1,$2}' ./filename

    也可以加上 等

    3.  过滤记录

    awk '$1=="android" && $3>=10000 ' filename
    输出  android 3.4.3 82256 65735
        android 3.2.1 10503 8540
        android 3.3.0 82071 66686
        android 3.4.0 18517 15031

    此时四列满足条件的数据都将被输出(默认情况)

    如果需要输出指定的数据需要使用前面提到的输出方法。

    $ awk '$1=="android" && $3>=10000 {print $1,$2}  '  filename

    此时可以总结这样的规律:awk的语句是写在'***' 中的,{**}中写输出的内容,语句中间没有符号,顺着向后写即可

    注意!!!!

    $1=="android" 这里的字符串需要用双引号

      3.1  输出行号

      awk '$1=="android" && $3>=10000 {print NR,$1,$2}’ filename

    4.  指定分隔符

     awk -F ’;‘ '{print NR,$1,$2}‘

    -F可以指定分隔符,默认是Tab或是空格

      4.1  内建变量

      awk的一些内建变量:

    $0 当前记录(这个变量中存放着整个行的内容)
    $1~$n 当前记录的第n个字段,字段间由FS分隔
    FS 输入字段分隔符 默认是空格或Tab
    NF 当前记录中的字段个数,就是有多少列
    NR 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
    FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号
    RS 输入的记录分隔符, 默认为换行符
    OFS 输出字段分隔符, 默认也是空格
    ORS 输出的记录分隔符,默认为换行符
    FILENAME 当前输入文件的名字

    如果是多个分隔符可以写成

    awk -F '[,;]'

    指定输出分隔符 awk -F OFS=" " '{print $1}'   filename

    5.  字符串匹配

    awk '$1 ~ /an.*|ipad/ {print $0}'    filename

    ‘|’符号的左右不要随意添加空格

    awk '$1 ~ /an.*|ipad/ || NR==1 {print $0}'    filename

    即输出表头

    awk可以像grep一样的去匹配第一行,就像这样:

    awk '/ipad/' filename

    模式取反的例子:

    awk '$1 !~ /an.*|ipad/ {print $0}'  filename


  • 相关阅读:
    leetcode-442-数组中重复的数据
    leetcode-83-删除排序链表中的重复元素
    leetcode-80-删除排序数组中的重复项 II
    leetcode-26-删除排序数组中的重复项
    leetcode-889-105-106-根据前-中-后遍历构造二叉树
    leetcode-88-合并两个有序数组
    凉了!张三同学没答好「进程间通信」,被面试官挂了....
    多线程为了同个资源打起架来了,该如何让他们安定?
    Xlua中LuaBehaviour的实现
    Elasticsearch实战一
  • 原文地址:https://www.cnblogs.com/lingNote/p/3507836.html
Copyright © 2011-2022 走看看