Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1095694
  • 博文数量: 186
  • 博客积分: 4939
  • 博客等级: 上校
  • 技术积分: 2075
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 17:15
文章分类

全部博文(186)

文章存档

2018年(1)

2017年(3)

2016年(11)

2015年(42)

2014年(21)

2013年(9)

2012年(18)

2011年(46)

2010年(35)

分类: 系统运维

2014-06-01 20:16:00

   最近遇到一个奇怪的情况,感觉比较有意义,在这里记录一下,以便警示自己。

  文件a,内容 a 5,文件b的内容,a 3 7,现在用awk做处理,发现出现了一个让自己难以想明白的情况,代码简化如下:

  awk 'NR==FNR{a[$1" "$2]=$2}NR>FNR

     {   for( i in a)
         # 对应的action.
    }' a b
   最后发现结果循环了2次,加了N多print来debug,也不知道为什么,以为是版本太旧了呢,请教黑哥之后,才发现一个之前没怎么在意的问题。

  原来awk的pattern{action}的action的block不能有换行,正确的应该是NR>FNR{Action}。区域开始符号{应该跟Pattern在同一行,不能有换行符。而我平时没太注意,这次终于出现了
这个奇怪的现象。在上述代码区域,NR>FNR后没有任何action, 而for的部分没有pattern,所以每一行都被2次处理了(NR>FNR完全不起作用)。

  正确的应该是awk 'pattern1{Action1}pattern2{

          Action2
    }

其实debug可以print NR,FNR,因为从没注意这个问题,根本没想到这方面来。

阅读(1098) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~