创新路
我们一直在努力

使用awk语言处理文本和数据

先贴上一个简单的介绍:

awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。

紧接着我们分析一个语句的构成,单引号内是脚本字段,探究一下这个字段的运行过程:

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

执行顺序大概分为三步:

第一步,执行BEGIN语句,只执行一次。

第二步,逐行执行patten语句。

第三步,执行end语句,只执行一次。

实际上这三个部分并不是缺一不可的,随便缺少哪一块都可以,我们可以测试一下

image.png

image.png

image.png

当使用不带参数的print时,它就打印当前行

image.png

在awk的print语句块中双引号是被当作拼接符使用,例如:

image.png

awk 'END{ print NR }' filename命令可以统计行数,读入每一行时,NR对应的值就会更新。

image.png

实际上也可以不放在END里,比如这样:实时打印行数

image.png

对于awk的预算与判断,作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。

+ – 加,减

 / & 乘,除与求余 

+ – ! 一元加,减和逻辑非 

^ ** 求幂 

++ — 增加或减少,作为前缀或后缀

举例:awk 'BEGIN{a="b";print a++,++a;}'

image.png

这里令我百思不得其解:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0。

查找之后发现,输出a++时。由于先输出a再自增,所以输出0.但是其实a已经变为1,后面再经过++a。结果自然就成了2。

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机