awk疑问
时间:2011-04-19
来源:互联网
- cat file
- aaa
- bbb
- ccc
- ddd
- eee
- fff
- ggg
-
- aaaa
- bbbb
- cccc
- dddd
- eeee
- ffff
- gggg
-
- [root@rhel5-iptables shell]# awk '/ddd/{print i};i=$0{}' file
- ccc
- cccc
- [root@rhel5-iptables shell]# awk '/ddd/{print i};i=$0' file
- aaa
- bbb
- ccc
- ccc
- ddd
- eee
- fff
- ggg
- hhh
- aaaa
- bbbb
- cccc
- cccc
- dddd
- eeee
- ffff
- gggg
- hhhh
-
- 一直不太理解awk里面的多个{}是怎么执行的,能简单解释下吗?
作者: unixthisyear 发布时间: 2011-04-19
第二的没有{}, 但是分号后有i=$0 这个结果为真 默认就将$0打印出
作者: chenbin200818 发布时间: 2011-04-19
回复 unixthisyear
命令行下awk一般格式: awk 'pattern1{action1}pattern2{action2}...' file
1、pattern可省略,如省略默认pattern为真,如awk '{print}' 即为awk '1{print}' (这里以1为例,非空或非0即为真)
2、action可省略,如省略默认action为print,如awk '1' 即为awk '1{print}'
3、pattern{action}中若省略{action}的,必须后面加;后再接新的一段pattern{action},如awk '1;$1==2{print}$2=3{print}',1后面有;而$2=3前的;可有可无
awk '/ddd/{print i};i=$0'为省略action的形式
即为awk '/ddd/{print i};i=$0{print}'
pattern为i=$0,pattern的值为$0的值
作者: ywlscpl 发布时间: 2011-04-19
1、pattern可省略,如省略默认pattern为真,如awk '{print}' 即为awk '1{print}' (这里以1为例,非空或非0即为真)
2、action可省略,如省略默认action为print,如awk '1' 即为awk '1{print}'
3、pattern{action}中若省略{action}的,必须后面加;后再接新的一段pattern{action},如awk '1;$1==2{print}$2=3{print}',1后面有;而$2=3前的;可有可无
这里说pattern和action均可省略,还有一个疑问:
- [root@rhel5-iptables shell]# awk '{print}' file
- aaa
- bbb
- ccc
- ddd
- eee
- fff
- ggg
- hhh
-
- aaaa
- bbbb
- cccc
- dddd
- eeee
- ffff
- gggg
- hhhh
- [root@rhel5-iptables shell]# awk '{}' file
- [root@rhel5-iptables shell]# awk '' file
- [root@rhel5-iptables shell]#
作者: unixthisyear 发布时间: 2011-04-19
关于i=$0,awk在执行的时候是这样的,
先给i赋值,即i=$0, 然后再进行一次判断,i是否为真,如果为真,打印当前行的$0,
你可以对比下面同一个代码对两个不同数据的处理结果:
- echo "1
- 2
- 3
- 4" |awk '/3/{print i}i=$0'
- 1
- 2
- 2
- 3
- 4
-
- echo "1
- 0
- 3
- 4" |awk '/3/{print i}i=$0'
- 1
- 0
- 3
- 4
作者: yinyuemi 发布时间: 2011-04-19
疑问是什么?
awk '{}' file action为空操作,当然没任何输出
awk '' file pattern和action都省略了,也是空操作
作者: ywlscpl 发布时间: 2011-04-19
先执行赋值操作,然后把xx作为这个pattern的值
作者: ywlscpl 发布时间: 2011-04-19
疑问是什么?
awk '{}' file action为空操作,当然没任何输出
awk '' file pattern和action都省略了,也是空操作
疑问是:
awk '{}' file 不是相当于awk '1{print}' file 省略了pattern(也就是1)和action(也就是print)了 ?
作者: unixthisyear 发布时间: 2011-04-19
我没说同时省略,照你这样理解,
每条awk语句后面后面都要追加无穷个1{print}了,因为你理解空即是同时省略了pattern和action
作者: ywlscpl 发布时间: 2011-04-19
我没说同时省略,照你这样理解,
每条awk语句后面后面都要追加无穷个1{prin ...
ywlscpl 发表于 2011-04-19 13:15
同意!pattern和action总要有一,否则就无法控制awk了
作者: yinyuemi 发布时间: 2011-04-19
只省略了pattern,action为{}
所以awk'{}' file即awk '1{}' file
作者: ywlscpl 发布时间: 2011-04-19
作者: unixthisyear 发布时间: 2011-04-19
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28