【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2019-05-12
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多