我只是在一个大约有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时最多只能容纳一定数量字节的缓冲区?

如果有人可以对此有所启发,我将不胜感激。

我的操作系统详细信息是
SunOS <hostname> 5.10 Generic_147148-26 i86pc i386 i86pc

最佳答案

区别可能在于Nawk的缓冲区限制。在输入文件中找到的记录(行)之一可能超出了它。

此关键行可以在awk.h中找到:

#define RECSIZE (8 * 1024)  /* sets limit on records, fields, etc., etc. */

09-19 04:05