【问题标题】:gawk error with 3GB file on Win server 2008Win server 2008 上 3GB 文件的 gawk 错误
【发布时间】:2012-05-20 00:26:54
【问题描述】:

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

所以我尝试使用 gawk 查看“违规”记录:

gawk -F, "NF

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

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

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

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

我尝试了几种不同的 gawk 语句,但在服务器上都失败了 - 都在我的 PC 上运行。

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

谢谢,彼得

【问题讨论】:

  • 如果文件有 Unix 换行符,DOS 上的 AWK 实现可能会将其全部读取为一行。
  • @user1405306 这很有趣。您是否确认笔记本电脑上的文件与服务器文件相同?也许带有校验和或FC?或者至少以字节为单位比较文件大小?你有没有发现原因?我可以想象它需要 1GB 内存的唯一原因是它没有找到记录分隔符,或者文件编码有问题,或者服务器的语言环境与笔记本电脑不同。该文件是否只有 ASCII 数据?

标签: windows-server-2008 gawk


【解决方案1】:

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

关于您的问题,awk 不应该需要大量内存来以您想要的方式处理文件。在我看来,这就像一个笨拙的错误。试试其他版本的 awk,比如 Kernighan 的 One True Awk

【讨论】:

  • 谢谢,我相信服务器硬件是 64 位的 - 不确定 win server 2008 软件。电脑是 64 位硬件和软件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多