Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么coreutils';s shuf的音阶这么差?_Bash_Shuffle_Gnu Coreutils - Fatal编程技术网

Bash 为什么coreutils';s shuf的音阶这么差?

Bash 为什么coreutils';s shuf的音阶这么差?,bash,shuffle,gnu-coreutils,Bash,Shuffle,Gnu Coreutils,我使用bash和shuf来洗牌一个4亿行的文件,当我直接操作这个文件时,花了大约两个小时 因为这对我的口味来说有点长,我必须重复这个洗牌,所以我将文件分成大约400个1x10^6行的卡盘,洗牌后将它们放在一起 即使使用拆分操作和cat,也只需短短10分钟。有人能帮我理解这个糟糕的缩放吗 非常感谢 通过仅分割和洗牌块,可能的结果集大大减少。而且,shuf是coreutils的一部分,而不是bash。可能是内存问题。你对shuf的两种用法并不相同。在第一种情况下,输入中连续的两行之间的最大输出距离为

我使用bash和shuf来洗牌一个4亿行的文件,当我直接操作这个文件时,花了大约两个小时

因为这对我的口味来说有点长,我必须重复这个洗牌,所以我将文件分成大约400个1x10^6行的卡盘,洗牌后将它们放在一起

即使使用拆分操作和cat,也只需短短10分钟。有人能帮我理解这个糟糕的缩放吗


非常感谢

通过仅分割和洗牌块,可能的结果集大大减少。而且,
shuf
coreutils
的一部分,而不是
bash
。可能是内存问题。你对shuf的两种用法并不相同。在第一种情况下,输入中连续的两行之间的最大输出距离为4亿。第二个数字只有100万。我怀疑,在第一种情况下,完整的输入(或输出)文件无法放入可用内存中,而在第二种情况下可能(或几乎)装入。这导致第一种情况下的I/O操作比第二种情况下的I/O操作多得多。您无法比较这两种情况。当你将“一个大文件”分割成“许多小文件”时,你就排除了将行从一个小文件移动到另一个小文件的可能性,因此。。。结果是不同的。另外:对400ML行进行排序要比对4ml行进行100次排序(可能使用不同的核心)复杂得多。根据您的使用情况,--head count选项可能会帮助您,请参阅:通过仅对块进行拆分和洗牌,可以大大减少可能的结果集。此外,
shuf
coreutils
的一部分,不是
bash
。可能是内存问题。你对shuf的两种用法并不相同。在第一种情况下,输入中连续的两行之间的最大输出距离为4亿。第二个数字只有100万。我怀疑,在第一种情况下,完整的输入(或输出)文件无法放入可用内存中,而在第二种情况下可能(或几乎)装入。这导致第一种情况下的I/O操作比第二种情况下的I/O操作多得多。您无法比较这两种情况。当你将“一个大文件”分割成“许多小文件”时,你就排除了将行从一个小文件移动到另一个小文件的可能性,因此。。。结果是不同的。另外:对400ML行进行排序比对4ml行进行100次排序更复杂(可能使用不同的核心)。根据您的使用情况,--head count选项可能会帮助您,请参阅: