为什么 sort.exe 在 32 位 Windows 上截断大输出?

为什么 sort.exe 在 32 位 Windows 上截断大输出?

我们有一个来自客户端的数据文件,其大小为 1,443,777,659 字节。

排序后的输出缺少行并且大小只有 1,269,801,985 字节。

示例命令:sort -k 1,10 -T . -s -i file_to_sort.txt -o out.txt

我们已经在32位 Win 7 和 XP 系统上尝试过。

我们已经尝试了 Windows 附带的 sort.exe,以及来自 UnxUtils 和 Gnu coreutils 的二进制文件。

没有一个会出错,但所有都会产生完全相同的输出大小。我尝试过另一个免费软件实用程序,它可以工作,但速度要慢得多。

我相信这可能是由于 32 位限制,但是文件大小似乎并不接近任何常见的大小,并且这些程序通过写入和合并较小的文件来工作,这些文件的大小均不超过 2 GB。

有什么建议可以帮你彻底解决这个问题吗?谢谢。

答案1

好的,所以问题与文件大小完全无关。似乎是因为文件是在文本模式下打开的,并且在末尾附近包含一个 0x1A(Windows 上的 ^Z 或 EOF)字符。

一旦在输入过程中遇到此字符,它就会停止读取。没有办法解决这个问题,因为没有标志以二进制方式打开文件。

我应该更快地找到它,但挖掘 1.5GB 的文件并不容易 :)

相关查询:https://stackoverflow.com/questions/13582804/why-can-windows-not-read-beyond-the-0x1a-eof-character-but-unix-can

答案2

如果文件包含不可打印字符,您不想忽略它们。删除 -i 选项并使用 LC_ALL=C 运行。

例如

export LC_ALL=C
sort -k 1,10 -s <file_to_sort.txt >out.txt

相关内容