一: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 [参数] [处理内容] [操作对象]
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. -F'f' : 指定f为分隔符
6.awk的生命周期
  1. grep,sedawk都是读一行处理一行,直到处理完成。
  2. 1. 接收一行作为输入
  3. 2. 把刚刚读入进来得到文本进行分解
  4. 3. 使用处理规则处理文本
  5. 4. 输入一行,赋值给$0,直至处理完成
  6. 5. 把处理完成之后的所有数据交给END{}来再次处理

二: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. OFS : 指定打印分隔符(默认空格)
  25. 案例1:(输出的意思 分隔符会打印出来)
  26. awk -F: 'BEGIN{OFS=" >>> "}{print $NF, $1}' /etc/passwd
  27. FS 的优先级要高于 -F
  28. 解析:
  29. BEGIN{OFS=" >>> "} : 指定打印分隔符
  30. $NF : 存储以 >>> 分隔符的最后一列
  31. $1 : 存储以 >>> 分隔符的第一列
  32. print : 打印

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

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

四: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. |%+15s| : | 为分隔符 %s 配合 printf 使用 代替当前字符串 右对齐 占用15字符
  14. |%-15s| : | 为分隔符 %s 配合 printf 使用 代替当前字符串 左对齐 占用15字符
  15. \n : 换行符
  16. $NF : 存储以 | 为分隔符的最后一列
  17. $1 : 存储以 | 为分隔符的第一列

五: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. a案例3
  21. 打印结尾不包含bash
  22. awk -F '$NF !~ /bash/{print $0}' /etc/passwd
  23. 解析:
  24. !~ : 不包含 (将打印其他内容)

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

  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 : 是行

八:逻辑表达式

  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. 案例3:(非(条件取反))
  9. awk -F: '!($3 + $4 > 2000){print $0}' /etc/passwd

九:算数表达式

  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...

十:流程控制

  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. while每一行打印10
  20. while 使用格式
  21. awk -F: '{i=1; while(i<10){print $0, i++}}' /etc/passwd
  22. 解析:
  23. i++ 相当于python中的 i+=1
  24. 加到条件不成立为止
  25. 格式:
  26. while(条件判断){}

十一:实战案例(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中awk命令详解(最全面秒懂)

    一:linux中awk命令 1.awk命令简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinber ...

  2. linux中awk命令学习

    awk是一个强大的文本分析工具,awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. 通常获取某一行时,我们会使用 “grep 关键字“进行查找,但在读取某一列时, ...

  3. Linux 中 awk命令应用

    ls -la | awk '{printf ("%8s %8s %8s %8s %8s %8s %8s %8s %8s\n",$1,$2,$3,$4,$5,$6,$7,$8,sub ...

  4. Linux中awk命令的简单用法

    一.用例1: cat /proc/meminfo|grep "MemTotal"|awk '{print $2}' 说明,$2表示第2位,$0表示全部,如需表示$,可用$$转义.

  5. Linux中exec命令相关

    Linux中exec命令相关 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. b ...

  6. linux中awk的使用

    在linux中awk绝对是核心工具,特别是在查找搜索这一领域,和掌握sed命令一样重要 下面为awk的一些基本知识,基于这些知识,可以让你随意操控一个文件: 在awk中:()括号为条件块,{}为执行的 ...

  7. linux中grep命令的使用

    转载:http://blog.csdn.net/universsky/article/details/8866402 linux中grep命令的使用 grep (global search regul ...

  8. [转帖]Linux中awk工具的使用

    Linux中awk工具的使用 2018年10月09日 17:26:20 谢公子 阅读数 2170更多 分类专栏: linux系统安全   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权 ...

  9. linux中touch命令参数修改文件的时间戳(转)

    linux中touch命令参数不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件,以下是linux中touch命令参数的使用方法: touch [-acm][-r ...

随机推荐

  1. c++设计模式概述之备忘录

    代买写的不够规范,,目的是缩短篇幅,实际中请不要这样做. 1.概述 和这个模式相似的生活场景,比如 office的撤销操作.VS  和 xcode等IDE的撤销操作 . 其实都是恢复到上一个或者下一个 ...

  2. 【LeetCode】1408. 数组中的字符串匹配 String Matching in an Array

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力遍历 日期 题目地址:https://leetco ...

  3. Codeforces 888E:Maximum Subsequence(枚举,二分)

    You are given an array a consisting of n integers, and additionally an integer m. You have to choose ...

  4. vue 核心加解密工具类 方法

    1 /* base64 加解密 2 */ 3 export let Base64 = require('js-base64').Base64 4 5 /* md5 加解密 6 */ 7 export ...

  5. Oracle数据库安装Version12c

    1.安装规划 Oracle数据库版本: Linuxamd64_12102_database 12c Linux服务器系统: CentOS Linux release 7.5.1804 (Core) 6 ...

  6. 基于机器学习和TFIDF的情感分类算法,详解自然语言处理

    摘要:这篇文章将详细讲解自然语言处理过程,基于机器学习和TFIDF的情感分类算法,并进行了各种分类算法(SVM.RF.LR.Boosting)对比 本文分享自华为云社区<[Python人工智能] ...

  7. linux 之 mysql数据库备份与恢复

    备份 mysqldump -uroot -p123 --databases test > ~/test.sql --databases 指定数据库 恢复 mysql -uroot -p123 & ...

  8. Pytest_Hook函数pytest_addoption(parser):定义自己的命令行参数(14-1)

    考虑场景: 我们的自动化用例需要支持在不同测试环境运行,有时候在dev环境运行,有时候在test环境运行: 有时候需要根据某个参数不同的参数值,执行不同的业务逻辑: 上面的场景我们都可以通过" ...

  9. HttpRunner_参数化进阶

    一.获取返回包数据   在提取参数时,当 HTTP 的请求响应结果为 JSON 格式,则可以采用.运算符的方式,逐级往下获取到参数值:响应结果的整体内容引用方式为 content 或者 body,如上 ...

  10. python的作用域、globals()-全局变量 和 locals()-局部变量

    在python中,函数会创建一个自己的作用域,也称为为命名空间.当我们在函数内部访问某个变量时,函数会优先在自己的命名空间中寻找. 我们自己定义的全局变量均在python内建的globals()函数中 ...