来自awk和nawk的不同结果

Ank*_*kit 3 unix awk nawk

我刚刚在一个有大约2.5亿条记录的文件上运行这两个命令.

awk '{if(substr($0,472,1)=="9") print $0}' < file1.txt >> file2.txt
Run Code Online (Sandbox Code Playgroud)

nawk '{if(substr($0,472,1)=="9") print $0}' < file1.txt >> file2.txt
Run Code Online (Sandbox Code Playgroud)

记录长度为482.第一个命令在file2.txt中给出了正确的记录数,即; 6000万,但nawk命令只提供420万.

我很困惑,想知道是否有人遇到过这样的问题.这个简单的命令究竟是如何在内部以不同的方式处理的?有一个缓冲区在使用nawk时只能容纳一定数量的字节吗?

如果有人可以对此有所了解,我将不胜感激.

我的OS详细信息是

SunOS <hostname> 5.10 Generic_147148-26 i86pc i386 i86pc
Run Code Online (Sandbox Code Playgroud)

kon*_*box 7

差异可能取决于Nawk的缓冲限制.输入文件中找到的记录(行)之一可能超出了它.

这个关键的行可以在awk.h中找到:

#define RECSIZE (8 * 1024)  /* sets limit on records, fields, etc., etc. */
Run Code Online (Sandbox Code Playgroud)

  • @Ankit你写的'记录长度是482'.(8*1024)的记录是有效记录似乎不对.祝好运. (3认同)