gpt4 book ai didi

bash - 随机播放一个太大而无法放入内存的文件

转载 作者:行者123 更新时间:2023-11-29 08:52:50 27 4
gpt4 key购买 nike

我有一个太大的文件无法放入内存。 shuf 似乎在 RAM 中运行,并且 sort -R 不会随机播放(相同的行最终彼此相邻;我需要所有的行都被随机播放)。除了推出我自己的解决方案之外,还有其他选择吗?

最佳答案

使用 decorate-sort-undecorate 的形式pattern 和 awk 你可以做类似的事情:

$ seq 10 | awk 'BEGIN{srand();} {printf "%06d %s\n", rand()*1000000, $0;}' | sort -n | cut -c8-
8
5
1
9
6
3
7
2
10
4

对于一个文件,你会做:

$ awk 'BEGIN{srand();} {printf "%06d %s\n", rand()*1000000, $0;}' SORTED.TXT | sort -n | cut -c8- > SHUFFLED.TXT

cat 管道开头的文件。

这通过生成一列介于 000000999999 之间的随机数来实现(修饰);对该列进行排序(排序);然后删除该列(未修饰)。这应该在 sort 不理解数字的平台上工作,通过生成一个带有前导零的列来进行字典排序。

如果需要,您可以通过多种方式增加随机化:

  1. 如果您的平台的排序 理解数值(POSIX、GNU 和 BSD 可以),您可以执行 awk 'BEGIN{srand();} {printf "%0.15f\t%s\n", rand(), $0;}' 文件.TXT |排序-n | cut -f 2- 使用接近 double 的 float 进行随机表示。

  2. 如果您受限于字典排序,只需将对 rand 的两次调用合并到一列中,如下所示:awk 'BEGIN{srand();} {printf "% 06d%06d\t%s\n", rand()*1000000,rand()*1000000, $0;}' 文件.TXT |排序-n | cut -f 2- 给出复合的 12 位随机数。

关于bash - 随机播放一个太大而无法放入内存的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40814785/

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