AWK

  • 1. 什么是awk
  • 2. 基本格式
  • 3. 工作原理
  • 4. 常见的内建变量(可直接用)
  • 5. 按行输出文本
  • 6. 按字段输出文本
  • 7. 通过管道、双引号调用shell命令
  • 8. 小案例 :awk集合getline、数组的用法

1. 什么是awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
相较于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据。

2. 基本格式

awk后面接两个单引号并加上大括号{ }来设置想要对数据进行的处理操作,awk可以处理后续接的文件,也可以读取来自前个命令的标准输,但如果awk主要是处理每一行的字段内的数据时,默认的字段分隔符为“空格键”或“Tab键”

3. 工作原理

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中, 并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段"然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与”、"“表示"或”、"!“表示"非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

4. 常见的内建变量(可直接用)

FS∶ 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF∶ 当前处理的行的字段个数
NR∶ 当前处理的行的行号(序数)
$0∶当前处理的行的整行内容。
$n∶ 当前处理行的第n个字段(第n列)。
FILENAME∶ 被处理的文件名。
RS∶ 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’
FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。
NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。

5. 按行输出文本

实例1:输出全部内容

实例2:输出第1到第3行的内容

实例3:输出第1行和第3行的内容,输出奇数和偶数行,像sed -n ‘n;p’

实例4:输出包含指定字符的行

实例5:输出包含指定字符的行并统计有多行
分析:
BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;
awk再处理指定的文本,之后再执行END模式中指定的动作;
END{ } 语句块中,往往会放入打印结果等语句。

6. 按字段输出文本

实例1:输出指定分隔符的指定字段

实例2:输出指定字段在指定范围内的行,并选择输出的字段

实例3:awk结合三元运算符的使用。

实例4:输出行和内容

实例5:输出指定字段中包含指定字符的行,然后输出指定字段。

7. 通过管道、双引号调用shell命令

实例1:输出文本内容,结合awk以指定字符为分隔符,然后统计出行数。

实例2:awk结合管道命令使用

实例3:查看当前内存使用百分比

实例4:查看当前系统的CPU的空闲率

实例5:显示上次系统重启的时间

8. 小案例 :awk集合getline、数组的用法

案例1:统计在线用户的数量
分析:
当getline左右无重定向符“<”或“1”时,awk首先读取到了第一行,就是1,然后getline, 就得到了1下面的第二行,就是2,因为getline之后,awk会改变对应的NF, NR,FNR和$0等 内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来。
当getline左右有重定向符“<”或“I”时,getline则作用 于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入那么getline返回的是该文件的第一行, 而不是隔行。

案例2:分别显示0到10的奇数和偶数行

案例3:指定分隔符来分隔字符串
$1=$1是用来激活$0的重新赋值,也就是说
字段$1…和字段数NF的改变会促使awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做

案例4:使用awk创建数组,并循环

案例5:使用awk来统计httpd访问日志中每个客户端IP出现的次数,超过三次进行提示。
awk ‘/Failed password/ {ip[$11]++}; END {for(i in ip){print i,ip[i]}}’ /var/log/secure
1.先测试好提取ip和次数的正确命令,方便我们直接在脚本里面使用。

2.根据第一步的命令再次使用awk进行ip和次数的提取,然后做个if判断即可。

3.测试结果

【拔刀吧少年】之awk文本和数据处理编程语言相关推荐

  1. shell脚本详解(十一)——awk文本和数据处理编程语言

    shell脚本详解(十一)--awk文本和数据处理编程语言 一.awk命令 – 文本和数据进行处理的编程语言 1.工作原理 2.命令格式 3.awk常见的内建变量(可直接使用) 4.按行输出文本 5. ...

  2. 【拔刀吧少年】之sed编辑器

    sed 一.sed编辑器 二.sed编辑器工作流程 1.读取 2.执行 3.显示 三.命令格式 四.常用选项 五.常用操作 六.使用地址 七.删除行 八.替换 1.格式 2.4种替换标记 九.插入 一 ...

  3. 【拔刀吧少年】之正则表达式

    序言 正则表达式 通常用于判断语句中,用于检查某一字符串是否满足某一格式 正则表达式是由普通字符与元字符组成 普通字符包括大小写字母.数字.标点符号及一些其他符号 元字符是指在正则表达式中具有特殊意义 ...

  4. 【拔刀吧少年】之shell编程规范与变量

    shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官"(`又称命令的组合`) 二.用 ...

  5. 【拔刀吧少年】之Expect 自动化控制和测试 Here Document 免交互

    免交互 一.Here Document免交互 1.1 概述 1.2 语法格式 1.3 简单案例 1.4 支持变量替换 1.5 多行注释 1.6 完成自动划分磁盘免交互 二.Expect进行免交互 2. ...

  6. 【拔刀吧少年】之sort uniq tr cut eval常用命令

    sort uniq tr cut eval 一.排序命令--sort 1.格式 2.常用选项 二.去除重复行操作命令--uniq 1.格式 2.常用选项 3.示例 三.字符转换命令--tr 1.格式 ...

  7. 【拔刀吧少年】之shell数组

    数组 一.数组 1.数组的定义方法 2.数组包括的数据类型 3.获取数组长度 4.获取数据列表 5.读取某索引赋值 6.数组遍历 7.数组切片 8.数组替换 9.数组删除 10.数组追加元素 二.数组 ...

  8. 【拔刀吧少年】之shell函数

    函数 一.shell函数定义 二.格式 三.函数返回值 四.函数传参 五.函数变量的作用范围 六.递归 1.阶乘 2.递归查目录 七.创建函数库 总结 一.shell函数定义 将命令序列按格式写在一起 ...

  9. 【拔刀吧少年】之循环三兄弟for while until

    循环三兄弟 一.echo命令 – 输出字符串或提取Shell变量的值 1.格式 2.常用参数 3.常用的转义字符 二.循环语句 1.for循环结构 2.while循环语句结构(迭代) 3.until ...

最新文章

  1. 新到DELL M1000e 刀片服务器
  2. adb logcat通过包名过滤(dos命令find后跟变量)
  3. 数据库元数据数据字典查询_6_列出给定表的外键引用
  4. 像亲和数一样亲密无间(洛谷P1851题解,Java语言描述)
  5. HTMl悬浮播放器XPlayer,XPlayer万能视频播放器
  6. java linux 时间戳转时间_Java时间和时间戳的相互转换
  7. 通信专业顶刊_通信类期刊排名_2016通信期刊排名_2016通信前沿新技术
  8. 数据挖掘之大数据流处理
  9. linux怎么卸载字体,Ubuntu下字体安装与卸载
  10. 51nod2384 事后诸葛亮
  11. 高树玛丽亚在线观看_音乐玛丽亚·凯里的数学数字
  12. 【补作业】msp430单片机(一)控制LED灯的亮灭
  13. TB6612FNG模块使用说明
  14. Solr DIH dataConfig参数XXE漏洞
  15. vue 右键菜单contextMenu
  16. java企业开发四:ssh+JPA(hibernate实现)
  17. fwrite和fread函数的用法小结
  18. 解决Idea Maven生成的jar运行出现“没有主清单属性”问题
  19. 基于android公交车线路查询论文文献,基于Android手机的实时公交查询系统设计与实现...
  20. dedecms 模板引用php文件名,织梦DEDECMS模板文件名介绍与说明

热门文章

  1. android使组件居中,Android图文居中显示控件使用方法详解
  2. 质数环问题c语言,素数环问题
  3. python中title用法_在CSV fi中使用Title()
  4. 商品规格js_品优购电商系统开发 第3章 规格及模板管理
  5. docker 安装 minio
  6. 打包文档_苏教版小学数学16年级全十二册教案Word文档打包下载
  7. redis插件连接集群 shiro_Shiro经过Redis管理会话实现集群(转载)
  8. python监控端口_python3 端口监控
  9. dropout理解(三)
  10. 小米高管否认鸿蒙,小米参加华为鸿蒙系统实验?小米高管终于回应,网友评论炸了!...