免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1681 | 回复: 5
打印 上一主题 下一主题

一个awk的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-19 22:09 |只看该作者 |倒序浏览
我创建一个awk-file的文件,内容如下:
M.Tansley                        05/99        48311        Green        8        40 44
J.Lulu                06/99        48317        grenn        9        24 26
P.Bunny                02/99        48        Yellow        12        35 28
J.Troll                07/99        4842        Brown-3        12        26 26
L.Tansley                        05/99        4712        Brown-2        12        30 28

接着我执行:awk 'gsub(4842,4899) {print $0}' awk-file
输出结果是:
J.Troll                07/99        4899        Brown-3        12        26 26
我又执行:awk '{gsub(4842,4899)} {print $0}' awk-file
输出结果是:
M.Tansley                        05/99        48311        Green        8        40 44
J.Lulu                06/99        48317        grenn        9        24 26
P.Bunny                02/99        48        Yellow        12        35 28
J.Troll                07/99        4899        Brown-3        12        26 26
L.Tansley                        05/99        4712        Brown-2        12        30 28

根据以上两种结果,想请教各位高手加了{}后,为什么会出现这种问题,谢谢指教

论坛徽章:
0
2 [报告]
发表于 2008-08-19 23:18 |只看该作者
第一条awk的格式使用错误。awk的格式是awk 'pattern action'。
gsub是一个functiong,是在action部分使用的。
加了两个{}之后,相当于是两个action了,因此对每一个pattern行都要执行一次action,gsub只是替换而不会执行print操作,因此只有后一个pring $0才有输出。

论坛徽章:
0
3 [报告]
发表于 2008-08-20 09:07 |只看该作者
谢谢LS的回答,但是第一条是书上写的,第二条是我原创的。

论坛徽章:
0
4 [报告]
发表于 2008-08-20 14:17 |只看该作者
检讨一下,第一个用法应该也可以的

gsub匹配了,就修改,然后print出来,如果不匹配就不输出。你可以吧4842改成48,则输出的有48的行,48都改成4899了。

论坛徽章:
0
5 [报告]
发表于 2008-08-20 19:35 |只看该作者
再次感谢LS的回答,我明白了!

论坛徽章:
0
6 [报告]
发表于 2008-08-20 22:10 |只看该作者
awk 'gsub(4842,4899) {print $0}' awk-file
等价于
awk 'gsub(4842,4899)' awk-file

gsub(4842,4899) 函数返回 0 或 1
返回 0:匹配不成功
返回 1:匹配成功并替换

pattern {atction}
本题中,pattern 为一,匹配成功,执行命令{action},如无{action},默认print $0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP