【awk工具的使用】

上面也提到了awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行
一行的去执行。awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到
的。awk工具其实是很复杂的,有专门的书籍来介绍它的应用,但是笔者认为学那么复杂没
有必要,只要能处理日常管理工作中的问题即可。何必让自己的脑袋装那么东西来为难自
己?毕竟用的也不多,即使现在教会了你很多,你也学会了,如果很久不用肯定就忘记了。
鉴于此,笔者仅介绍比较常见的awk应用,如果你感兴趣的话,再去深入研究吧。
a.截取文档中的某个段

image

解释一下,-F 选项的作用是指定分隔符,如果不加-F指定,则以空格或者tab为分隔符。

image

Print为打印的动作,用来打印出某个字段。$1为第一个字段,$2为第二个字段,依次类推,
有一个特殊的那就是$0,它表示整行。

image

注意awk的格式,-F后紧跟单引号,然后里面为分隔符,print的动作要用’{}’括起来,否则
会报错。print还可以打印自定义的内容,但是自定义的内容要用双引号括起来。

image

b.匹配字符或字符串

image

跟sed很类似吧,不过还有比sed更强大的匹配。

image

可以让某个段去匹配,这里的’~’就是匹配的意思,继续往下看

image

awk还可以多次匹配,如上例中匹配完root,再匹配test,它还可以只打印所匹配的段。

image

不过这样没有啥意义,笔者只是为了说明awk确实比sed强大。

 

d.条件操作符

image

awk中是可以用逻辑符号判断的,比如’==’就是等于,也可以理解为“精确匹配”。另外也有’>’,
‘>=’,‘<’,‘<=’,‘!=’ 等等,值得注意的是,即使$3为数字,awk也不会把它当数字看待,它会
认为是一个字符。所以不要妄图去拿$3当数字去和数字做比较。

image

这样是得不到我们想要的效果的。这里只是字符与字符之间的比较,’6’是>’500’的。

image

上例中用的是’!=’ 即不匹配。

image

另外还可以使用”&&” 和“||”表示“并且”和“或者”的意思。

image

也可以是或者的关系

image

d.awk的内置变量
常用的变量有:
NF:用分隔符分隔后一共有多少段;
NR:行数

image

上例中,打印总共的段数以及最后一段的值。

image

可以使用NR作为条件,来打印出指定的行。

image

e.awk中的数学运算

image

awk比较强的地方,还在于能把某个段改成指定的字符串,下面还有更强的呢!

image

当然还可以计算某个段的总和。

image

这里的END要注意一下,表示所有的行都已经执行,这是awk特有的语法,其实awk连同
sed都可以写成一个脚本文件,而且有他们特有的语法,在awk中使用if判断、for循环都
是可以的,只是笔者认为日常管理工作中没有必要使用那么复杂的语句而已。

image

这里的END要注意一下,表示所有的行都已经执行,这是awk特有的语法,其实awk连同
sed都可以写成一个脚本文件,而且有他们特有的语法,在awk中使用if判断、for循环都
是可以的,只是笔者认为日常管理工作中没有必要使用那么复杂的语句而已。

image

注意这里’()’的使用。
基本上,正则表达的内容就这些了。但是笔者要提醒你一下,笔者介绍的这些仅仅是最
基本的东西,并没有提啊深入的去讲sed和awk,但是完全可以满足日常工作的需要,有时
候也许你会碰到比较复杂的需求,如果真遇到了就去请教一下google吧。下面出几道关于
awk的练习题,希望你要认真完成。
1.用awk打印整个test.txt (以下操作都是用awk工具实现,针对test.txt);
2.查找所有包含’bash’的行;
3.用’:’作为分隔符,查找第三段等于0的行;
4.用’:’作为分隔符,查找第一段为’root’的行,并把该段的’root’换成’toor’(可以连同sed一起
使用);
5.用’:’作为分隔符,打印最后一段;
6.打印行数大于20的所有行;
7.用’:’作为分隔符,打印所有第三段小于第四段的行;
8.用’:’作为分隔符,打印第一段以及最后一段,并且中间用’@’连接(例如,第一行应该是
这样的形式“root@/bin/bash”;
9.用’:’作为分隔符,把整个文档的第四段相加,求和;


下面给出答案:
1.awk'{print $0}'test.txt
2.awk'/bash/'test.txt
3.awk-F':''$3=="0"' test.txt
4.awk-F':''$1=="root"'test.txt|sed's/root/toor/'
5.awk-F':''{print $NF}'test.txt
6.awk-F':''NR>20' test.txt
7.awk-F':''$3<$4' test.txt
8.awk-F':''{print $1"@"$NF}'test.txt
9.awk-F':''{(sum+=$4)};END{printsum}'test.txt

转载于:https://my.oschina.net/jiaozg/blog/93656

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值