linux shell 有一个比较复杂的命令:awk 。下面是我对该命令的理解和做的一些思考。
首先awk 的模式为: # awk -option parameter ' command ' fileName
其中commmand 的格式为:模式+动作行为。
其中option 用的最多的恐怕是:-F ,也就是指定分隔符。现在我们假设使用默认分隔符----空格。
有如下文件 aa.txt
001 alias 20 $11,000
002 blex 21 $12,000
003 clets 22 $30,000
004 darker 23 $52,000
该文件分为4个域,分别为:序号,姓名,年龄,银行存款。
看如下命令 # awk '/alias/{print $0}' aa.txt
在command 部分,我们很容易区分 /alias/ 为模式部分 {print $0} 为动作行为部分。
输出结果为:
001 alias 20 $11,000
看这个命令: # awk '{print $0}' aa.txt
在command部分,我们看到了动作行为部分{print $0} 但没有看到模式部分,命令执行的结果呢:
001 alias 20 $11,000
002 blex 21 $12,000
003 clets 22 $30,000
004 darker 23 $52,000
证明,没有模式部分,相当于,模式部分为:真。
再看 # awk '/^00/' aa.txt
在command部分,我们看到了模式部分:行首匹配00, 但没有看到动作部分,命令执行的结果呢:
001 alias 20 $11,000
002 blex 21 $12,000
003 clets 22 $30,000
004 darker 23 $52,000
OK,还是整个文件,证明没有动作行为部分,则默认输出$0(整行)。
再看 # awk '1' aa.txt
模式直接写了个“1”,动作,按照我们上面的结论是默认输出$0,结果如下
001 alias 20 $11,000
002 blex 21 $12,000
003 clets 22 $30,000
004 darker 23 $52,000
原来“1”被解释为:模式为真。
再看 # awk '0' aa.txt
模式直接写了个“0”,动作,按照我们上面的结论是默认输出$0,结果为空,什么都没输出,
原来“0”被解释为:模式为假。
再看 # awk 'aaa' aa.txt
模式直接写了个“aaa”,动作,按照我们上面的结论是默认输出$0,结果为空,什么都没输出,
原来“aaa”被解释为:模式为假。
还可以试出 :0111为真,1aaaa,为真,000aaa为假。
可以得到结论模式不一定是,某个匹配,或者是某个逻辑表达式,还可以是数字或字符,如果,数字大于0,则模式为真否则为假,对于数字和字符的混合,则比较复杂,不过想来,谁都不会那么无聊,用字符和数字的混合来表示模式,呵呵。
再看一个:#awk ' /^001/{print $1,$2}{print $0}' aa.txt 输出的结果为:
001 alias
001 alias 20 $11,000
002 blex 21 $12,000
003 clets 22 $30,000
004 darker 23 $52,000
哦,看来“行首匹配001”这个没对后面的{print $0}起作用啊!
原来是,一个模式对应一个动作,后面那个动作没有模式,也就采用了我们上面所说的默认模式,对每条记录都执行了啊。
下面看两个变量:NR,NF
NR 为 NUMBER OF RECORD 存储记录数目
NF 为 NUMBER OF FIELD 存储域数目
看个例子 #awk ''BEGIN{print $0,NR,NF}{print NR,NF }END{print NR,NF}'可以得到的结果为:
00
14
24
34
44
可以看到读取一条记录,其实NR和NF都在变化。
归纳出 awk的执行过程:处理BEGIN,然后,读取一条记录,更新NR的值,更新$0,将$0分域,更新NF的值,更新$1......$n,然后处理commmand 的内容,最后处理END。
©著作权归作者所有:来自51CTO博客作者时代码农的原创作品,如需转载,请注明出处,否则将追究法律责任
职场 休闲
其他
0
收藏
上一篇:工作日志2007.01.04 下一篇:preceding轴的使用实例
2条评论
按时间倒序 按时间正序推荐专栏更多
微服务技术架构和大数据治理实战
大数据时代的微服务之路
共18章 | 纯洁微笑
¥51.00 669人订阅
订 阅
基于Python的DevOps实战
自动化运维开发新概念
共20章 | 抚琴煮酒
¥51.00 430人订阅
订 阅
猜你喜欢
我的友情链接 Hibernate 级联查询时,session关闭的问题 Java线程:线程的调度-休眠 我们不得不面对的中年职场危机 职场终极密籍--记我的职业生涯 用光影魔术手制作一寸照片(8张一寸) 我的IT职场生涯: 毕业4年,月薪过万 Linux关闭休眠和屏保模式 年薪从0到10万-我的IT职场经验总结 Windows7删除休眠文件hiberfil.sys节省大量C盘空间 致IT同仁 — IT人士常犯的17个职场错误 “跳槽加薪”现象,无奈的职场规则 智能合约编程语言-solidity快速入门(下) Android中适配器的notifyDataSetChanged()为何有时不刷新 如何在Spring Boot中使用Hibernate Natural ID 从hook开始聊聊那些windows内核数据结构 Scala的actor 正则性能调优 windows下kafka+ELK的日志系统 Nginx下,请求本机另外Host很慢
扫一扫,领取大礼包
0
2
分享
时代码农
Ctrl+Enter 发布
发布
取消