我们有一个来自客户端的数据文件,其大小为 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 的文件并不容易 :)
答案2
如果文件包含不可打印字符,您不想忽略它们。删除 -i 选项并使用 LC_ALL=C 运行。
例如
export LC_ALL=C
sort -k 1,10 -s <file_to_sort.txt >out.txt