• awk常用命令


    背景

    linux中如果简单的查看文件内容 可以用cat命令

    如果想对文件的内容做一些统计 awk 一个强大的文本处理语言,用于数据处理和统计

    本文只是介绍一些简单的常用命令

    awk常用命令

    首先我们准备一个文本文件用来测试 Hello.txt

      Hello xiaohong 1999
      Hello xiao hong 1999
      Hello xiaoming 1992
      Hello xiao ming 1992

    1. 直接输出文本文件的内容

      awk '{print}' hello.txt  

    2.输出某一行 

      awk '{print $1}' hello.txt   ($1代表第一行的意思 和print用空格隔开)

    3.输出某几行 

      awk '{print $1,$2}' hello.txt   $1和$2之间用逗号隔开

    4. 把某几行对其打印

      awk '{print $1" "$2" "$3" "$4}' hello.txt (把逗号换成 " ")

    5. NR(number of record)行数和NF(number of field)列数的使用

       5.1 awk '{print NR ,$0}' hello.txt  (每一行打印出来 前面会加一个数字 表示第几行)

        1 Hello xiaohong 1999
        2 Hello xiao hong 1999
        3 Hello xiaoming 1992
        4 Hello xiao ming 1992

      5.2 awk '{print NF ,$0}' hello.txt  (每一行打印出来 前面会加一个数字 表示有几列 可以看出)

        3 Hello xiaohong 1999
        4 Hello xiao hong 1999
        3 Hello xiaoming 1992
        4 Hello xiao ming 1992

    可以看出 awk默认以空格区分一共有几列

    6.  筛选第四行是1992的内容

       awk '$4==1992{print $0}' hello.txt  ($0 指所有列) 

            如果第四列不是纯数字 需要用双引号 awk '$4=="1992"{print $0}' hello.txt

    7. 输出某一行/列

      awk 'NR==3{print $0}' hello.txt  打印第三行的内容

    8. 更改awk的分隔符

      awk 'BEGIN{FS=","}{print $1}' hello.txt  (awk分隔符默认是空格 可以更改awk的分隔符)FS指的是输入分隔符,OFS输出分隔符

    9. awk输出多个文件

       awk '{print NR,$0}' hello.txt test.txt 会把 hello.txt和test.txt的内容一起打印出来(行号叠加)

    10. awk如何隐藏一列

       awk '{ $1="xxx";print $0}' hello.txt

    第一列就会被指定xxx输出

    11. awk打印最后一列

      awk '{print $NF}' hello.txt  awk '{print ($NF-1)}' hello.txt 打印倒数第二列

    12. awk模糊匹配

      把文档中含有999的打印出来

      awk '/999/{print $0}' hello.txt  这里用到了正则表达式

    13. 分组和汇总

            Hello xiaohong 22 nan
         Hello xiaozhang 22 nv
         Hello xiaoming 23 nan
         Hello xiaohei 24 nv

      13.1 统计22岁的有多少人

        awk  '$3=="1999"{a+=1}END{print "1999",a}' hello.txt 

      13.2 按性别分组, 计算各组人数和年龄平均值

       awk '{a[$4]+=1;b[$4]+=$3}END{for (i in a)print i, "人数:",a[i], "平均年龄:", b[i]/a[i]}' hello.txt

        (b[i]是i in a的总年龄 i有nan和nv,a[i]是总人数,for (i in a)print i 遍历所有性别)

    输出打印结果

    nan 人数: 2 平均年龄: 22.5
    nv 人数: 2 平均年龄: 23

    参考知乎文章:https://zhuanlan.zhihu.com/p/61652727?utm_source=wechat_session

    解释变量a b:awk '{a=1;b=3; print a + b}'  awk可以声明变量并做计算(打印结果4)

    任何在BEGIN之后列出的操作(在{}内)将在Unix awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。

    因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。

  • 相关阅读:
    quartz 中JobExecutionContext的使用
    Memcached 集群架构方面的问题
    Spring+Quartz 集群
    Spring Quartz 持久化解决方案
    不同版本(2.3,2.4,2.5) web.xml 的web-app头信息
    Spring Framework 4.0.0发布,首次支持Java 8
    Serializable java序列化
    Quartz 有状态的JobDataMap
    JobDataMap 不能被序列化如何解决研究中
    Spring-3.2.5 + Quartz-2.2.1 集群实例(Tomcat+Memcached+Quartz集群session共享)
  • 原文地址:https://www.cnblogs.com/ssskkk/p/14250290.html
Copyright © 2020-2023  润新知