如何在shell脚本中从数据集等概率随机采样50个文件?
随机抽取数据集文件相关问题解答
核心问题确认
你使用的find /mnt/Dataset/ -type f | shuf -n 50命令完全可以满足等概率随机抽取50个文件的需求。
细节问题解答
- shuf命令默认会先将所有输入行完整读入内存、统计总行数之后再执行随机选择,不存在边读边选的逻辑。
- shuf的抽样算法是无偏的,每一行被选中的概率完全均等,正好匹配你的需求。
- 常规场景下不需要使用其他工具,只有当你要处理的总文件数极大(比如千万级以上,所有文件路径读入后超出当前机器内存上限)时,才需要换用基于蓄水池抽样的其他实现。
可选优化建议
如果你的数据集内存在包含换行符的特殊文件名,可使用空字符分隔的版本避免解析错误:
find /mnt/Dataset/ -type f -print0 | shuf -z -n 50 | tr '\0' '\n'
内容的提问来源于stack exchange,提问作者Fractale
相关产品推荐
相关产品推荐

