【问题标题】:randomly sample a subset of a file in command-line without replacement在命令行中随机采样文件的子集而不进行替换
【发布时间】:2020-06-22 16:56:37
【问题描述】:
我跟随这个线程here 随机打乱一个非常大的文件中的数据。正如该线程中所指出的, shuf 会耗尽内存并花费很长时间。所以我最终使用了 perl 命令
perl -ne 'print if (rand() < .01)' huge_file.csv > sample.csv
并且工作效率很高。但是,我注意到它选择了重复的行。我想知道是否有任何方法可以将替换设置为 False 以防止这种情况发生?
【问题讨论】:
标签:
linux
file
unix
command-line
shuffle
【解决方案1】:
如果你的源数据有重复的行,那一点 perl 只能打印重复。你可以用类似的东西删除它们
sort -u bigfile.csv | perl -ne 'print if (rand() < .01)' > sample.csv
sort 非常擅长对大文件进行排序而不会占用所有内存。您还可以在选择具有相似性的随机样本行后删除重复项
perl -ne 'print if (rand() < .01)' bigfile.csv | sort -u > sample.csv