一:linux中awk命令

1.awk命令简介
  1. AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
  2. 之所以叫 AWK 是因为其取了三位创始人 Alfred AhoPeter Weinberger, Brian Kernighan Family Name 的首字符
  3. linux中有三剑客之称:
  4. 三剑客之首就是 AWK
  5. 三剑客功能:
  6. grep 过滤文本
  7. sed : 修改文本
  8. awk : 处理文本

2.awk作用
  1. awk主要是用来格式化
3.awk的语法格式
  1. awk [参数] [处理内容] [操作对象]
  2.  
  3.  
4.解析awk使用方法
  1. print : 打印
  2. NF : 统计总字段数
  3. $ : 取值
  4. 结合作用:
  5. $配合NF使用 : NF内存储统计文件内每行的总字段,$存储NF内的值
  6. NF :相当于 变量值 $ :相当于 变量名
  7. print相当于打印 $ 内的内容

5.参数
  1. -F : 指定文本分隔符 (本身默认是以空格作为分隔符)
  2. 实战案例:

  3. awd -F'f' '{print $NF}' 1.txt
  4.  
  5.  
  6. 解析:

  7. -F'f' : 指定f为分隔符

  8.  
6.awk的生命周期
  1. grep,sedawk都是读一行处理一行,直到处理完成。
  2.  
    1. 接收一行作为输入
    1. 把刚刚读入进来得到文本进行分解
    1. 使用处理规则处理文本
    1. 输入一行,赋值给$0,直至处理完成
      1. 把处理完成之后的所有数据交给END{}来再次处理

    1.  

    二:awk中的预定义变量

    1. $0 : 代表当前行(相当于匹配所有)
    2. awk -F: '{print $0, "---"}' /etc/passwd
    3. $n : 代表第n

    4. 案例1:(以:为分隔符)

    5. awk -F: '{print $1}' /etc/passwd

    6. 案例2:(默认空格为分隔符)

    7. awk '{print $1}' /etc/passwd
    8. NF : 记录当前统计总字段数

    9. 案例1:(以:为分隔符 统计文件内每行内的行数)

    10. awk -F: '{print NF}' /etc/passwd

    11. 案例2:(以:为分隔符 统计文件内每行总字段 并打印每行统计行数)

    12. awk -F: '{print $NF}' /etc/passwd
    13. NR : 用来记录行号

    14. 案例1:

    15. awk -F: '{print NR}' /etc/passwd
    16. FS : 指定文本内容分隔符(默认是空格)

    17. 案例1:

    18. awk 'BEGIN{FS=":"}{print $NF, $1}' /etc/passwd

    19. 解析:

    20. BEGIN{FS=":"} : 相当于指定以 : 为分隔符

    21. $NF : 存储以 : 分隔符的最后一列

    22. $1 : 存储以 : 分隔符的第一列

    23. print : 打印
    24.  
    25.  
    26. OFS : 指定打印分隔符(默认空格)

    27. 案例1:(输出的意思 分隔符会打印出来)

    28. awk -F: 'BEGIN{OFS=" >>> "}{print $NF, $1}' /etc/passwd

    29. FS 的优先级要高于 -F

    30. 解析:

    31. BEGIN{OFS=" >>> "} : 指定打印分隔符

    32. $NF : 存储以 >>> 分隔符的最后一列

    33. $1 : 存储以 >>> 分隔符的第一列

    34. print : 打印

    35.  

    三:awk运行处理规则的执行流程

    1. 1. BEGIN{} : 最开始执行
    2. 2. // : 正则
    3. 3. {} : 循环体
    4. 4. END{} : 最后执行
    5.  
    6.  
    7. 这里面最少有一个,最多有四个!

    8.  

    四:awk中的函数

    1. print : 打印
    2. printf : 格式化打印
    3. %s : 字符串
    4. %d : 数字
    5. - : 左对齐
    6. + : 右对齐
    7. 15 : 至少占用15字符
    8. awk中函数(格式化打印)

    9. 案例1:

    10. awk -F: 'BEGIN{OFS=" | "}{printf "|%+15s|%-15s|\n", $NF, $1}' /etc/passwd
    11.  
    12.  
    13. 解析:

    14. | : | 为分隔符

    15. |%+15s| : | 为分隔符 %s 配合 printf 使用 代替当前字符串 右对齐 占用15字符

    16. |%-15s| : | 为分隔符 %s 配合 printf 使用 代替当前字符串 左对齐 占用15字符

    17. \n : 换行符

    18. $NF : 存储以 | 为分隔符的最后一列

    19. $1 : 存储以 | 为分隔符的第一列

    20.  

    五:awk中的定位

    1. 1.正则表达式
    2. 案例1:(awk中匹配有root内容的行)
    3. awk -F: '/root/{print $0}' /etc/passwd
    4. 解析:
    5. /root/{print $0} : awk中先执行正则 在执行循环 匹配文件内有root的每一行。
    6. $0 :代表所有
    7. 案例2:(awk中匹配root开头的行)
    8. awk -F '/^root/{print $0}' /etc/passwd

    六:比较表达式(匹配文本之内的内容)

    1. > : 小于
    2. < : 大于
    3. >= : 小于等于
    4. <= : 大于等于
    5. ~ : 正则匹配(包含)
    6. !~ : 正则匹配(不包含)
    7. 案例1

    8. 要求打印属组ID大于属主ID的行

    9. awk -F: '$4 > $3{print $0}' /etc/passwd

    10. 解析:

    11. $4 : 代表属组所在列

    12. $3 : 代表属主所在列

    13. $0 : 所有行
    14. 案例2

    15. 打印结尾包含bash

    16. awk -F: '$NF ~ /bash/{print $0}' /etc/passwd

    17. 解析:

    18. $NF ~ /bash/ :尾部最后一列 包含 bash 的行

    19. ~ : 包含
    20.  
    21.  
    22. a案例3

    23. 打印结尾不包含bash

    24. awk -F '$NF !~ /bash/{print $0}' /etc/passwd

    25. 解析:

    26. !~ : 不包含 (将打印其他内容)

    27.  

    七:条件表达式(文本之外的内容)

    1. ==
    2. >
    3. <
    4. >=
    5. <=
    6. 要求打印第三行

    7. 案例1

    8. awk -F: 'NR == 3{print $0} /etc/passwd'

    9. 解析:

    10. NR : 行号

    11. NR == 3 : 行号等于3
    12. 注意:

    13. $1 : 是列

    14. NR == 3 : 是行
    15.  
    16.  

    八:逻辑表达式

    1. && : 逻辑与
    2. || : 逻辑或
    3. : 逻辑非
    4. 案例1:(与(两者条件必须都成立))

    5. awk -F: '$3 + $4 > 2000 && $3 * $4 > 2000{print $0}' /etc/passwd
    6. 案例2:(或(两者条件一个成立即可))

    7. awk -F: '$3 + $4 > 2000 || $3 * $4 > 2000{print $0}' /etc/passwd
    8.  
    9.  
    10. 案例3:(非(条件取反))

    11. awk -F: '!($3 + $4 > 2000){print $0}' /etc/passwd

    12.  

    九:算数表达式

    1. + :加
    2. - :减
    3. * :乘
    4. / :除
    5. % :求余
    6. 1.要求匹配打印出属组 + 属主的ID 大于 2000

    7. 案例1

    8. awk -F: '$3 + $4 > 2000{print $0}' /etc/passwd
    9. 2.要求属组 * 属主的ID 大于 2000

    10. 案例2

    11. awk -F: '$3 * $4 > 2000{print $0}' /etc/passwd
    12. 3.要求打印偶数行

    13. 案例3

    14. awk -F: 'NR % 2 == 0{print $0}' /etc/passwd

    15. 解析:

    16. NR :全部行号 除以 2 == 零的 零等于余数
    17. 偶数 : 2 4 6...
    18. 4.要求打印奇数行

    19. 案例4:

    20. awk -F: 'NR % 2 == 1{print $0}' /etc/passwd
    21. NR  :全部行号 除以 2 == 1 零等于奇数
    22. 奇数: 1 3 5...

    23.  

    十:流程控制

    1. 简介:
    2. 流程控制只存在循环之中
    3. if

    4. awk -F: '{if($3>$4){print "大于"}else{print "小于或等于"}}' /etc/passwd

    5. 解析:

    6. 判断文件 第三列大于第四列的话打印(大于) 不大于 else
    7. if 使用格式:

    8. if(){} : 但分支

    9. if(){}else{} : 双分支

    10. if(){}else if(){}else{} : 多分支
    11. for每一行打印10

    12. for 使用格式

    13. awk -F: '{for(i=10;i>0;i--){print $0}}' /etc/passwd

    14. 解析:

    15. i-- 相当于python中的 i-=1 : i=i-1

    16. 减到条件不成立为止

    17. 格式:

    18. fro(i="初始值":条件判断:游标){}
    19.  
    20.  
    21. while每一行打印10

    22. while 使用格式

    23. awk -F: '{i=1; while(i<10){print $0, i++}}' /etc/passwd

    24. 解析:

    25. i++ 相当于python中的 i+=1

    26. 加到条件不成立为止

    27. 格式:

    28. while(条件判断){}

    29.  

    十一:实战案例(if判断打印隔五一行线)

    1. 1.使用if判断
    2. 每隔5行,打印一行横线
    3. awk -F: '{if(NR%5==0){print "----------"}print $0}' /etc/passwd
    4. 解析:
    5. 1. NR : 每一行的行号
    6. 2. 行号 除以 5 ==0
    7. 3. 打印一行
    8. 以此类推 4%5=0.8

    点击查看原文章

    linux中awk命令详解(最全面秒懂)的更多相关文章

    1. 【转】linux中ifconfig 命令详解详解

      1 概述 ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置.用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在.要想将上述的配置信息永远的存的电 ...

    2. Linux中rm命令详解

      linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除 ...

    3. Linux之awk命令详解

      简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

    4. linux中top命令详解

      linux的top命令里的cpu信息是什么意思呢? Cpu(s): 62.1% us, 15.9% sy,0.1% ni, 19.4% id,2.0% wa,0.1% hi,0.4% si Mem:  ...

    5. linux下awk命令详解

      简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

    6. linux中echo命令详解

      linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法 echo命令的功能是在显示器上显示一段文字,一般起到一个提示 ...

    7. Linux的awk命令详解

      awkawk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分再 ...

    8. linux 之awk命令详解

      awk是一种程序语言,对文档资料的处理具有很强的功能.awk名称是由它三个最初设计者的姓氏的第一个字母而命名的: Alfred V. Aho.Peter J. We i n b e rg e r.Br ...

    9. linux中ls命令详解 (转)

      -a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录.      -l -- 长(long).列举目 ...

    随机推荐

    1. CSRF跨站请求伪造与XSS跨域脚本攻击讨论

      今天和朋友讨论网站安全问题,聊到了csrf和xss,刚开始对两者不是神明白,经过查阅与讨论,整理了如下资料,与大家分享. CSRF(Cross-site request forgery):跨站请求伪造 ...

    2. 记一次grpc server内存/吞吐量优化

      背景 最近,上线的采集器忽然时有OOM.采集器本质上是一个grpc服务,网络设备通过grpc协议将数据上报后,采集器进行格式等整理后,发往下一个系统(比如分析,存储). 打开运行环境,发现特性如下: ...

    3. Docker 与 K8S学习笔记(二十四)—— 工作负载的使用

      我们前面讲了很多关于Pod的使用,但是在实际应用中,我们不会去直接创建Pod,我们一般通过Kubernetes提供的工作负载(Deployment.DeamonSet.StatefulSet.Job等 ...

    4. .NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)

      一.引言 上一篇.NET ORM框架HiSql实战-第一章-集成HiSql 已经完成了Hisql的引入,本节就把 项目中的菜单管理改成hisql的方式实现. 菜单管理界面如图: 二.修改增删改查相关代 ...

    5. 软件测试—Day2

      day2 Q:面试过程中,性能测试你测试什么?关注的点是什么? A:程序的响应时间,系统的吞吐量,以及并发用户数,和tps,qps,以及DB的IOPS,和服务器的系统资源(CPU和内存).通过一定的工 ...

    6. DNS原理与配置

      DNS介绍 域名管理系统DNS(Domain Name System)是域名解析服务器的意思,应用层协议,是互联网的一项服务. DNS作用是: 把域名转换成网络可以识别的ip地址,在通过IP地址访问主 ...

    7. 思维导图学《On Java》基础卷

      说明 原来读过 <Java 编程思想(第 4 版)>,但是这个版本还是基于 Java 5 讲解.由于 Java 8 做出了非常大的改进(是 Java 变化最大的版本),且截止到 2022- ...

    8. Web Worker: Shared Worker的使用

      Web Worker: Shared Worker的使用 参考资料: JavaScript高级程序第四版 https://juejin.cn/post/7064486575916187656 http ...

    9. 关于char[]数组通过scanf赋值使用上的一些问题。。

      关于char[]数组通过scanf赋值使用上的一些问题. 假如我们有这么一段代码 #include <stdio.h> int main(void){ char c1[2]; scanf( ...

    10. linux 判断变量是否相等方法

      echo $? 输出上一个命令执行成功与否的情况 1表示失败 0 表示成功 test检测文件类型和比较值 有空格时等号才是判断,否则为赋值