gpt4 book ai didi

sorting - unix 排序所需的磁盘空间

转载 作者:行者123 更新时间:2023-12-01 16:45:29 26 4
gpt4 key购买 nike

我目前正在对 500GB 文本文件进行 UNIX 排序(通过 Windows 计算机上的 GitBash)。由于主磁盘上的空间不足,我使用 -T 选项将临时文件定向到有足够空间容纳整个文件的磁盘。问题是,我一直在观察磁盘空间,显然临时文件已经超过了原始文件的大小。我不知道这会持续多久,但我想知道是否有一条规则可以预测临时文件需要多少空间。

最佳答案

我会按照 this unix.SE answer 中的描述手动对其进行批处理。 .

找到一些非常基本的查询,将您的内容分成足够小的 block 以进行排序。例如,如果它是单词文件,您可以创建诸如 grep ^a …grep ^b … 等查询。有些项目可能需要比其他项目更多的粒度。

您可以编写这样的脚本:

#!/bin/bash
for char1 in other {0..9} {a..z}; do
out="/tmp/sort.$char1.xz"
echo "Extracting lines starting with '$char1'"
if [ "$char1" = "other" ]; then char1='[^a-z0-9]'; fi
grep -i "^$char1" *.txt |xz -c0 > "$out"
unxz -c "$out" |sort -u >> output.txt || exit 1
rm "$out"
done
echo "It worked"

我使用 xz -0 因为它几乎与 gzip 的默认 gzip -6 一样快,但它在节省空间方面要好得多。我从最终输出中省略了它,以便保留 sort -u 的退出值,但您可以使用大小检查(iirc,排序失败,输出为零),然后使用 sort -u |xz -c0 >> output.txt.xz 因为 xz(和 gzip)容器允许您连接文件(我之前也曾 written about that)。

这是有效的,因为每个 grep 运行的输出都已经排序(0 位于 1 之前,1 位于 a 之前,等等) ,因此最终的程序集不需要通过 sort 运行(请注意,“其他”部分会略有不同,因为一些非字母数字字符位于数字之前,其他字符位于数字和字母之间,其他的仍然在字母后面。您还可以删除 grep 的 -i 标志,并另外迭代 {A..Z} 以区分大小写)。每个单独的迭代显然仍然需要排序,但希望它们是可管理的。

如果程序在完成所有迭代之前退出并说“它有效”,那么您可以为它尝试的最后一次迭代使用更离散的批处理来编辑脚本。删除所有先前的迭代,因为它们已成功保存在 output.txt 中。

关于sorting - unix 排序所需的磁盘空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38877222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com