我刚刚在一个有大约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中给出了正确的记录数,即; 6000万,但nawk命令只提供420万.
我很困惑,想知道是否有人遇到过这样的问题.这个简单的命令究竟是如何在内部以不同的方式处理的?有一个缓冲区在使用nawk时只能容纳一定数量的字节吗?
如果有人可以对此有所了解,我将不胜感激.
我的OS详细信息是
SunOS <hostname> 5.10 Generic_147148-26 i86pc i386 i86pc
差异可能取决于Nawk的缓冲限制.输入文件中找到的记录(行)之一可能超出了它.
这个关键的行可以在awk.h中找到:
#define RECSIZE (8 * 1024)  /* sets limit on records, fields, etc., etc. */