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