【发布时间】: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 数据?