AWK
文章平均质量分 82
Awk was created in 1977 as a simple programming language for writing short programs that manipulate text and numbers with equal ease. It was meant as
十八年后又是
十八年后又是一条好汉
展开
-
AWK语言第二版 3.4 Unicode数据 3.5 基本图表 3.6 总结
探索性数据分析的目的是为了在对结果做出假设之前,去了解数据,寻找模式和异常。如 John Tukey所说:一些数据,结合上对答案的渴望,并不能确保从给定的数据体中提取出合理的答案。宁可要近似正确,而不要完全错误。正确问题的近似答案(通常是模糊的)比错误问题的确切答案(总是能做成精确的)要好得多。作为探索性数据分析的核心工具,Awk是非常值得学习的,因为你能用它来快速地统计、汇总、查找。原创 2023-11-08 08:46:49 · 87 阅读 · 0 评论 -
AWK语言第二版 3.3 数据分组
我们前面已经用了那么多次的 sort 和 uniq -c 的组合,所以现在都可以准确快速地打出来了,不过它们用得太频繁,可能应该写成脚本来用。看起来是对的——“sex”是表头,而剩下的是男性和女性,正如预期。如果你要做大量“选择一些域并计算其统计值”的这类操作,也许值得写一些短脚本,就像我们在第2章讨论的那样。另外有趣的是,在Ms被现代人普遍使用之前,它就已经被用了超过50年,不过我们没法知道当时它所指示的社会状况或条件。会得到:(结合排序,并使用2.2节的只输出头尾的程序)有多少男性和女性乘客?原创 2023-11-06 16:54:39 · 91 阅读 · 0 评论 -
AWK语言第二版 3.2啤酒评级
原始数据有13个属性,而我们这里只用其中的5个:酒厂名称,总体评价,啤酒风格,啤酒名称,酒精度数(酒精所占容量的百分比,简称ABV)。我们晚点再来研究这个,不过预先说一下,wc 是计算字节的(因此隐含假定输入全是ASCII),而Awk是计算Unicode UTF-8字符的。高酒精度啤酒的平均评级,高于所有啤酒的平均评级,后者又高于低酒精度啤酒的评级。在上面的样本行中,我们看到酒精度ABV变化范围比较大,这让我们有个疑问:这些啤酒里面最烈的是什么,酒精度有多高?当然这会带来更多问题,这回看看低酒精度的啤酒。原创 2023-11-01 10:43:46 · 86 阅读 · 0 评论 -
AWK语言第二版 第3章.探索性数据分析 3.1泰坦尼克号的沉没
这章也是第一版没有,第二版新增的。原创 2023-10-20 16:33:10 · 880 阅读 · 0 评论 -
AWK语言第二版 2.6个人库 2.7小结
本章的例子大部分是基于如下内容的组合:计算相关数值的算术表达式,储存信息的数组,以及封装计算的函数。在Awk里使用它们特别容易,因为Awk就是围绕它们来设计的,但同样的方法在其他语言里也是无价的,非常值得你花时间来掌握。Awk中没有变量声明,因此只要是调用者没有提供的参数,都会被当作函数的局部变量(很遗憾,这是语言设计的糟糕之处)。上面的代码用了一个比较随意的规则来将两位数的年份转换成四位数的:如果小于40,则认为是20xx年,否则认为是19xx年。是字符串里面的单词,而对应的值是单词在字符串中的索引。原创 2023-10-08 11:58:35 · 100 阅读 · 0 评论 -
AWK语言第二版 2.4摘要 2.5个人数据库
Awk可用于从包含表格数据的文件中快速获取摘要信息:最大值、最小值、列值的和,及其他类似的内容。这些也能用于数据校验:每个域里面有什么值,是否有空值等等。本节包含了几个这样的例子,下节会有更多(下节会讨论探索性数据分析)下面的 addup 脚本将输入的每列值加起来,并在末尾输出总和。# addup: 将每个域的值分别加起来i原创 2023-09-25 10:29:48 · 89 阅读 · 0 评论 -
AWK语言第二版 2.3转换
出于各种充分的理由(包括作者们从Unix早期以来就开始积累的经验和接受的熏陶),Awk使用了“仅换行符”的模型,尽管输入是Windows格式,它还是能正确处理。还能把这些选择作为程序的参数,供用户选择,不过对这个简单的例子来说就实在过头了,没有必要。下面这个版本,会收集所有的输入,以计算出最宽的域,并使用该宽度值来构造合适的 printf 字符串,将字符格式化输出到保证够宽的列中。把输入转换到输出是计算机做的事,但Awk做的是一种特定的转换:输入文本,对所有或部分行做些适当的修改,然后退出。原创 2023-09-15 17:58:31 · 80 阅读 · 0 评论 -
AWK语言第二版 2.2选择
下面有些例子,与现有的Unix工具功能上是重复的,之所以把它们放在这里讨论,更多地是为了讲解Awk,而不是要取代这些工具,当然Awk的灵活性意味着你可以定制自己所需的特殊版本。幸运的是,现代的处理器够快,内存够大,因此通常都是从尽可能简单的代码开始写起,而不是一开始就试图去节省cpu时间或内存空间。为此增加的复杂度是不值的,因为这样的程序处理一百万行的输入文件,也就只要几秒钟。如果输入行小于7行,这个程序会有问题,但作为个人使用的工具,只要你使用时记得它的限制,也许就没啥大不了的。原创 2023-09-11 11:39:31 · 90 阅读 · 0 评论 -
AWK语言第二版 2.Awk实战 2.1个人计算
注:第二版的第2章是全新的。第一版的第2章,是对Awk语言的详细说明。作者考虑到里面又长又干,不符合现代读者的习惯,于是在第二版中,将原第2章全部挪到 附录A(参考手册) 里面。第一版的附录A是Awk语言总结,是参考手册的简化版,在第二版废弃。第一版的附录B是练习答案,也在第二版去掉,改成放到网上。Awk非常适用于制作小工具或者个人使用的脚本,它们可以帮你完成重复性的工作,或者处理一些(别人不关心但只有你在乎的)特别古怪的计算。原创 2023-09-08 10:34:10 · 117 阅读 · 0 评论 -
AWK语言第二版 1.8有用的一句话程序 1.9接下来呢
NF > 4。原创 2023-09-06 10:11:58 · 69 阅读 · 0 评论 -
AWK语言第二版 1.6控制流语句 1.7数组
如果为真,则执行主体部分,即单条printf语句。任务很简单,就是把1到100的数字打印出来,但如果数字能被3整除,则打印fizz,如果能被5整除,则打印buzz,若都能整除,则打印fizzbuzz。另外还要注意,如果if语句值控制单条语句,则不需要大括号,但如果是多条语句,就需要加上大括号了。这个例子里面的数组下标是数值,但Awk最有用的一个特性就是,数组下标并不局限于数值,它可以是字符串。Awk提供了if-else语句来做决策控制,还提供了一些语句来做循环,这些都是从C语言借来的,只能用在动作里面。原创 2023-09-05 10:43:14 · 75 阅读 · 0 评论 -
AWK语言第二版 1.5 用Awk计算
前面的第二个例子中,内置变量如NR在END动作时保留了它的值,类似的,$0也一样保留了。程序可以用来打印最后一行。输出为。原创 2023-09-04 11:21:08 · 71 阅读 · 0 评论 -
AWK语言第二版 1.4 选择
Awk的样式很适合将输入行中感兴趣的行选取出来,用于后续处理。由于不含动作的样式会将所有匹配该样式的行都打印出来,因此很多Awk程序仅仅就包含一个样式。数据校验基本上是反着来的:它不是把包含所需属性的行打印出来,而是打印其中可疑的行。数据校验指的是:检查数据格式是否正确,取值是否合理。除了上面的数字测试之外,还能选择包含特定单词或短语的行。正则表达式可用于非常非常复杂的文本匹配,附录A.1.4有完整的说明。与前面第一个程序的逻辑是一样的,不过可读性会差。其中两个条件都符合的行,会打印两次。原创 2023-09-02 11:46:58 · 131 阅读 · 0 评论 -
AWK语言第二版 1.3 格式化输出
如果你想要打出每个员工的信息和他们的薪水,并按薪水增量排序,最简单的方法就是用Awk把薪水打印到员工信息前面,并将Awk的输出交给排序程序。第一个规格指定value1要如何打印,第二个规格指定value2要如何打印,以此类推。是一个字符串,包含了需要原样输出的文本,并在其中穿插着说明 value1~valuen 这些值要如何打印的。语句能生成几乎任意格式的输出,不过本节只会展示它的一小部分能力。规格字符串里的其他东西,包括美元$符号,都是原样输出的;,作为数字来输出,并且小数点后要留两位。原创 2023-09-01 17:16:07 · 220 阅读 · 0 评论 -
AWK语言第二版 1.2简单输出
所以不要认为这些样例就包含了Awk各方面的全部能力,我们也只会对样例做简单解释,而不会详细描述其中的细节。本章的后续部分,包含了一系列简单但典型的Awk程序样例,都是对前面的emp.data文件进行操作。通常我们需要做的是打印每行的几个或者全部域,可能还要做些计算。本节的程序都是这种形式的。在上面的 print 语句中,打印了这三种内容:双引号内的文本,输出域,计算出来的值。语句后面的各表达式之间用逗号分隔,则输出结果的各项之间会用单个空格分隔。会输出三项:域的个数,第一个域和最后一个域。原创 2023-09-01 10:44:49 · 117 阅读 · 0 评论 -
AWK语言第二版 1.1
Awk的基本操作,是扫描输入行,找到“匹配”程序中任意样式的行。你可能会注意到,命令行里面需要单引号把Awk程序包起来,因为如果不加单引号,Awk程序里面的$符号(其实应该还有大括号)会被shell解释,而且用了单引号还能在shell里面续行。因为样式和动作都是可选的,所以我们将动作放到大括号中,以便和样式区分开。第一种运行Awk的方式在程序短的时候还行,如果程序太长,就应该把它放到单独的文件里面,比如叫 progfile来执行。就会把第三个域为0的行的第一个域打出来,先打文件1的行,再打文件2的行。原创 2023-08-31 17:22:42 · 137 阅读 · 0 评论 -
AWK语言第二版 0.前言
Awk诞生于1977年,是一门简单的程序设计语言,它可以用很短的程序来同时轻松地操作文本和数值。Awk也是一门脚本语言,它遵循了UNIX的哲学(每个程序仅做好一件事,而且多个程序之间能组合起来完成更复杂的工作),填补了UNIX工具在这方面的空缺,并和其他UNIX工具配合地很好。1977年以来的计算机世界发生了巨大的变化:运算速度、内存大小、程序语言的种类、编程和运行环境、互联网、以及Unicode。原创 2023-08-31 12:59:15 · 69 阅读 · 0 评论