【发布时间】:2013-09-13 14:49:04
【问题描述】:
我刚刚在一个包含大约 2.5 亿条记录的文件上运行了这两个命令。
awk '{if(substr($0,472,1)=="9") print $0}' < file1.txt >> file2.txt
和
nawk '{if(substr($0,472,1)=="9") print $0}' < file1.txt >> file2.txt
记录长度为 482。第一个命令给出了 file2.txt 中正确的记录数 IE。; 6000 万,但 nawk 命令只给出 420 万。
我很困惑,想知道是否有人遇到过这样的问题。这个简单的命令究竟是如何在内部以不同的方式处理的?在使用 nawk 时,是否有一个缓冲区最多只能容纳一定数量的字节?
如果有人能对此有所了解,将不胜感激。
我的操作系统详细信息是
SunOS <hostname> 5.10 Generic_147148-26 i86pc i386 i86pc
【问题讨论】:
-
如果命令没有以某种方式失败,可能是 nawk 中的缓冲区设置为限制。
-
您能否改写您的问题以消除
>>附加到file2.txt中?也许有 nawk 版本> file3.txt?我假设您意识到这种情况正在发生,但是鉴于您的代码示例,您报告的内容不可能是真的。您是否尝试过nawk '...' file1.txt > file2.txt,消除重定向到脚本?应该没什么区别,但值得一试。另外,我会检查 4.2mill+1 记录点的原始数据,并确保文件中没有一些奇怪的字符,再次,这不重要,但是??。祝你好运。 -
@shellter,我试过用 nawk '{if(substr($0,472,1)=="9") print $0}'
file3.txt,结果是一样的。 4.2m+1 似乎也是正确的,它被 awk 捕获但不是 nawk。 -
@konsolebox 有没有办法检查缓冲区限制?
-
@konsolebox : 什么缓冲区限制?除了行大小, nawk (应该)一次处理一行,对吗?过去,我曾经使用 nawk 处理具有约 10 条轧机线的文件,并且希望它适用于任意数量的线。 @Ankit:请向我们展示
which awk、which nawk的结果。祝大家好运!