• 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来输出最终结果。

  • 相关阅读:
    (II)第一节:IOC 和 DI
    (I)第二节:开发环境
    (I)第一节:Spring 框架
    Spring【目录】
    MyBatisPlus 之 Oracle 数据库主键
    MyBatisPlus 之 公共字段自动填充
    MyBatisPlus 之 全局SQL注入器应用
    MyBatisPlus 之 自定义全局操作
    MyBatisPlus 之 代码生成器
    彻底理解Netty
  • 原文地址:https://www.cnblogs.com/ssskkk/p/14250290.html
Copyright © 2020-2023  润新知