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

原文地址:https://www.cnblogs.com/ssskkk/p/14250290.html