Awk 实例,第 1 部分
通用线程:Awk 实例,第 1 部分 Daniel Robbins 转载自:IBM developerWorks 中国网站
Awk 是一种非常好的语言,同时有一个非常奇怪的名称。在本系列(共三篇文章)的第一篇文章中,Daniel Robbins 将使您迅速掌握 awk 编程技巧。随着本系列的进展,将讨论更高级的主题,最后将演示一个真正的高级 awk 演示程序。 捍卫 awk 的确,awk 没有一个动听的名字。但它是一种很棒的语言。awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计。与某些语言不同,awk 的语法较为常见。它借鉴了某些语言的一些精华部分,如 C 语言、python 和 bash(虽然在技术上,awk 比 python 和 bash 早创建)。awk 是那种一旦学会了就会成为您战略编码库的主要部分的语言。 第一个 awk
您将会见到 /etc/passwd 文件的内容出现在眼前。现在,解释 awk 做了些什么。调用 awk 时,我们指定 /etc/passwd 作为输入文件。执行 awk 时,它依次对 /etc/passwd 中的每一行执行 print 命令。所有输出都发送到 stdout,所得到的结果与与执行catting /etc/passwd完全相同。 现在,解释 这里是另一个 awk 示例,它的作用与上例完全相同:
在 awk 中, 如果您愿意,可以创建一个 awk 程序,让它输出与输入数据完全无关的数据。以下是一个示例:
只要将 "" 字符串传递给 print 命令,它就会打印空白行。如果测试该脚本,将会发现对于 /etc/passwd 文件中的每一行,awk 都输出一个空白行。再次说明, awk 对输入文件中的每一行都执行这个脚本。以下是另一个示例:
运行这个脚本将在您的屏幕上写满 hiya。:)
多个字段
上例中,在调用 awk 时,使用 -F 选项来指定 ":" 作为字段分隔符。awk 处理
以下是该脚本输出的摘录:
如您所见,awk 打印出 /etc/passwd 文件的第一和第三个字段,它们正好分别是用户名和用户标识字段。现在,当脚本运行时,它并不理想 -- 在两个输出字段之间没有空格!如果习惯于使用 bash 或 python 进行编程,那么您会指望
以这种方式调用 print 时,它将连接
这将产生以下输出:
外部脚本
将脚本放入文本文件还可以让您使用附加 awk 功能。例如,这个多行脚本与前面的单行脚本的作用相同,它们都打印出 /etc/passwd 中每一行的第一个字段:
这两个方法的差别在于如何设置字段分隔符。在这个脚本中,字段分隔符在代码自身中指定(通过设置 FS 变量),而在前一个示例中,通过在命令行上向 awk 传递 -F":" 选项来设置 FS。通常,最好在脚本自身中设置字段分隔符,只是因为这表示您可以少输入一个命令行自变量。我们将在本文的后面详细讨论 FS 变量。 BEGIN 和 END 块 awk 还提供了另一个特殊块,叫作 END 块。awk 在处理了输入文件中的所有行之后执行这个块。通常,END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。 规则表达式和块awk 允许使用规则表达式,根据规则表达式是否匹配当前行来选择执行独立代码块。以下示例脚本只输出包含字符序列
当然,可以使用更复杂的规则表达式。以下脚本将只打印包含浮点数的行:
表达式和块
awk 提供了完整的比较运算符集合,包括 "=="、"<"、">"、"<="、">=" 和 "!="。另外,awk 还提供了 "~" 和 "!~" 运算符,它们分别表示“匹配”和“不匹配”。它们的用法是在运算符左边指定变量,在右边指定规则表达式。如果某一行的第五个字段包含字符序列
条件语句
这两个脚本的功能完全一样。第一个示例中,布尔表达式放在代码块外面。而在第二个示例中,将对每一个输入行执行代码块,而且我们使用 以下是更复杂的 awk
使用
转换成:
这两个脚本都只输出不包含 awk 还允许使用布尔运算符 "||"(逻辑与)和 "&&"(逻辑或),以便创建更复杂的布尔表达式:
这个示例只打印第一个字段等于 数值变量!
在 BEGIN 块中,将整数变量 字符串化变量
awk 将输出:
有趣吧!虽然将字符串值
如果做一个小实验,就可以发现如果某个特定变量不包含有效数字,awk 在对数学表达式求值时会将该变量当作数字零处理。 众多运算符 这些运算符包括前后加减( FS 值并没有被限制为单一字符;可以通过指定任意长度的字符模式,将它设置成规则表达式。如果正在处理由一个或多个 tab 分隔的字段,您可能希望按以下方式设置 FS:
以上示例中,我们使用特殊 "+" 规则表达式字符,它表示“一个或多个前一字符”。 如果字段由空格分隔(一个或多个空格或 tab),您可能想要将 FS 设置成以下规则表达式:
这个赋值表达式也有问题,它并非必要。为什么?因为缺省情况下,FS 设置成单一空格字符,awk 将这解释成表示“一个或多个空格或 tab”。在这个特殊示例中,缺省 FS 设置恰恰是您最想要的! 复杂的规则表达式也不成问题。即使您的记录由单词 "foo" 分隔,后面跟着三个数字,以下规则表达式仍允许对数据进行正确的分析:
字段数量
当然,也可以在条件语句中使用 NF 变量,如下:
记录号
另一个示例:
awk 提供了适合各种用途的附加变量。我们将在以后的文章中讨论这些变量。 现在已经到了初次探索 awk 的尾声。随着本系列的开展,我将演示更高级的 awk 功能,我们将用一个真实的 awk 应用程序作为本系列的结尾。同时,如果急于学习更多知识,请参考以下列出的参考资料。 参考资料
关于作者 |
转载于:https://www.cnblogs.com/ainima/archive/2004/11/12/6330891.html
Awk 实例,第 1 部分相关推荐
- Linux-京东字节百度提前批,一面二面都被问到了awk——实例篇(4)ip地址相关
去年提前批我投了京东.字节和百度,一面,二面都被问到了awk,如果你会,并且还很熟悉,那肯定算是一个加分项了!好感度up up up! 基本原理本篇不再赘述.请阅读: 总结了200篇面经中的awk面试 ...
- Linux-京东字节百度提前批,一面二面都被问到了awk——实例篇(2)去重统计排序
去年提前批我投了京东.字节和百度,一面,二面都被问到了awk,如果你会,并且还很熟悉,那肯定算是一个加分项了!好感度up up up! 基本原理本篇不再赘述.请阅读: 总结了200篇面经中的awk面试 ...
- Linux-京东字节百度提前批,一面二面都被问到了awk——实例篇(3)查进程,kill指定进程
去年提前批我投了京东.字节和百度,一面,二面都被问到了awk,如果你会,并且还很熟悉,那肯定算是一个加分项了!好感度up up up! 基本原理本篇不再赘述.请阅读: 总结了200篇面经中的awk面试 ...
- awk 实例练习(一)
前一篇学习了awk的基本知识,现在来做一些练习加深一下印象. 假设我们有这样一个待处理的文件"grade.txt": M.Tansley 05/99 48311 ...
- awk 实例练习 (三)
awk 使用printf #printf使用类似于C语言 #字符转换 zhuyupeng@zhuyupeng-PC ~ $ echo "65" | awk '{printf ...
- (转)awk实例练习(二)
文章转自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/14/2591842.html 先来总结一下awk内置变量: ARGC 命 ...
- linux awk 内置变量实例
awk 是一门非常优秀的文本处理工具,甚至可以上升作为一门程序设计语言. 它处理文本的速度是快得惊人的,现在很多基于shell 日志分析工具都可以用它完成.特点是设计简单,速度表现很好,本文将介绍aw ...
- Shell脚本之AWK
前言:这段时间主播心情不好,所以没有前言,但是作为三剑客里的大哥,awk是最难的同时也是最重要的,拐友们要认真看 目录 一.AWK的介绍 1.1AWK的概述 1.2AWK的工作原理 1.3AWK命令基 ...
- Introduce to AWK utility
通用线程:Awk 实例 Daniel Robbins (drobbins@gentoo.org) 第一部分 Awk 是一种非常好的语言,同时有一个非常奇怪的名称.在本系列(共三篇文章)的第一篇文章中, ...
最新文章
- android native堆内存泄露,Android Native内存泄露检测
- 轨迹规划概念总结——Dubins曲线
- redis管道pipeline的运用
- Java 网关-Servlet Gateway
- 数据结构与算法之猫狗队列
- 小说不“好看”,读者就给你“好看”
- day10 多媒体(文字 图片 音频 视频)
- python继承问题_Python类的继承问题
- Caffe-SSD相关源码说明和调试记录
- fcpx视觉特效插件包 - FxFactory for Mac 支持M1芯片
- python作用域的顺序_“Python”函数的参数和范围,及其,作用域
- 2路归并排序算法c语言,用二路归并排序算法实现N个元素的排序
- html flash带播放视频源码,HTML嵌套Flash播放视频
- 国科大.模式识别与机器学习.期末复习笔记手稿+复习大纲
- Comet:基于 HTTP 长连接的“服务器推”技术
- BDF 字体文件格式
- 美国金融危机产生的原因
- VC CDC类的使用 详解
- 装修细节注意问题 装修细节有哪些
- Java进阶(七)Set系列集合、Map集合体系
热门文章
- python【力扣LeetCode算法题库】5- 最长回文子串
- Comet oj比赛组队
- 01背包【动态规划】
- 工作单元php,PHP面向对象之工作单元
- 前端cookie 放到请求头_ajax请求携带cookie和自定义请求头header(跨域和同域)
- 华为手机业务网络推广外包持续受限,在当前市场下还能做些什么?
- python 决策树和随机森林_【python机器学习笔记】使用决策树和随机森林预测糖尿病...
- 服务器怎么可以维修荒野行动,荒野行动PC版 设置单独服务器让你尽情畅玩
- 西安思源中学2021高考成绩查询入口,西安思源中学隆重举行2020-2021学年第二学期开学典礼...
- 前置机上如何地址转换_canvas原生层级较高,遮盖自定义tabbar,转换为图片解决...