Win Server 2008上3GB文件的gawk错误

时间:2012-05-19 16:12:01

标签: windows-server-2008 gawk

后台:我正在尝试将3GB csv文本文件(20M行x 46 col)加载到SQLite表中。数据导入失败并出现错误:“当表格期望46个值时,记录3,493,675只有2个字段”。我想知道该记录是否只有2个字段(已损坏)或其他问题(我的怀疑)。

所以我试着用gawk查看'冒犯'记录:

gawk -F,“NF <46 {打印FNR,$ 1,NF}”

但收到错误消息(在运行Windows 2008的服务器上有8个进程,16GB RAM |我没有管理员权限):

“grow_top_buffer:iop-&gt; buf:无法分配1,073,741,826字节的内存(空间不足)”。

我搜索了这个错误,从2003年看到一些关于错误的帖子,但没有得到解决方案。

所以,这就是问题:我的4GB RAM Win 7笔记本上有相同的数据文件,同样版本的gawk工作正常 - 它读取整个20M记录......以及文件中的所有20M记录有表格所需的46个字段。

我尝试了几种不同的gawk语句,但都在服务器上失败了 - 所有这些都在我的电脑上运行。

问题:为什么Win服务器上的gawk缓冲内存错误?

谢谢,彼得

1 个答案:

答案 0 :(得分:2)

如果服务器计算机运行的是32位版本的Windows,并且您的PC运行的是64位版本的Windows,那么gawk可能会在您的PC上分配比服务器上更多的(虚拟)内存。这是因为它可能无法在服务器上处理该数量的内存。

关于你的问题,awk不需要大量内存来按你想要的方式处理文件。在我看来,这就像一个gawk bug。尝试另一个版本的awk,比如Kernighan的One True Awk