【问题标题】:Sorting file with 1.8 million records using script使用脚本对包含 180 万条记录的文件进行排序
【发布时间】:2013-08-05 15:40:33
【问题描述】:

我正在尝试删除具有 180 万条记录的文件中的相同行并创建一个新文件。使用以下命令:

sort tmp1.csv | uniq -c | sort -nr > tmp2.csv

运行脚本会创建一个新文件sort.exe.stackdump,其中包含以下信息:

"Exception: STATUS_ACCESS_VIOLATION at rip=00180144805
..
..
program=C:\cygwin64\bin\sort.exe, pid 6136, thread main
cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B"

该脚本适用于 10 行的小文件。似乎sort.exe 无法处理这么多记录。如何处理包含超过 180 万条记录的大文件?除了 ACCESS,我们没有任何数据库,我试图在 ACCESS 中手动执行此操作。

【问题讨论】:

  • 似乎 SORT.EXE(不管是什么)正在使用递归算法,并且它正在破坏堆栈。为什么不将 CSV 导入 Access,使用 ORDER BY 子句在查询中对其进行排序,然后导出到新的 CSV?
  • 180 万条记录并不能说明什么。每条记录有多大(或文件有多大)?
  • @Dukeling,从错误消息来看,它看起来像 Cygwin,这样的文件不应该有任何问题。我建议检查所有磁盘以确保其中一个没有被临时文件填满。

标签: exception sorting large-files stack-dump


【解决方案1】:

听起来您的排序命令已损坏。由于路径显示 cygwin,我假设这是 GNU 排序,如果有足够的内存和磁盘空间,这通常应该没有问题。尝试使用标志来调整它使用磁盘的位置和数量:http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

【讨论】:

    【解决方案2】:

    以下 awk 命令似乎是摆脱 uniqe 值的更快方法:

    awk '!v[$0]++' $FILE2 > tmp.csv

    其中 $FILE2 是具有重复值的文件名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2022-01-10
      • 2018-04-29
      • 2022-01-18
      相关资源
      最近更新 更多