最近遇到一个奇怪的情况,感觉比较有意义,在这里记录一下,以便警示自己。
文件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,因为从没注意这个问题,根本没想到这方面来。
阅读(1078) | 评论(0) | 转发(0) |