zoukankan      html  css  js  c++  java
  • 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来输出最终结果。

  • 相关阅读:
    Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
    JavaSE复习_11 IO流复习
    JavaSE复习_10 多线程复习
    采用多线程和生产者消费者模式来实现对于一个目录以及所有子目录下的文件内容的搜索,打印出包含指定关键字的行.
    多线程_多生产者多消费者的实现问题
    算法_栈与队列的Java链表实现
    算法_队列的Java通用数组实现
    vuex之单向数据流
    原生JS实现瀑布流布局
    addEventListener调用带参数函数
  • 原文地址:https://www.cnblogs.com/ssskkk/p/14250290.html
Copyright © 2011-2022 走看看