如何从我的数据集 中抽取 50 个随机文件,每个文件在 shell 脚本中具有相同的概率?

How to sample 50 random files from my dataset witch each file having the same probabilty to be taken in shell script?

find /mnt/Dataset/ -type f | shuf -n 50 是否有效? shuf 是否等待计算所有行然后进行随机选择? shuf 给每一行的概率是一样的吗?或者我应该使用其他工具?

当您想知道shuf如何与管道一起工作时(等待管道完成或处理数据可用时,您可以编写一个测试。测试将如下所示:

for ((i=0; i<20; i++)); do
  (printf "%s\n" {1..9}; sleep 0.1; echo 10) | shuf | tr '\n' ' '
  echo
done

此测试没有 -n 选项,您需要更大的样本来查看平均值。下一个循环更适合测试

for ((i=0; i<10000; i++)); do
  (printf "%s\n" {1..9}; sleep 0.01; echo 10) | shuf | tr '\n' ' '
  echo
done > sample.txt
# Look for how often 10 is the last number on a line
grep -c "10 $" sample.txt

我也做了测试:

cut -d " " -f1 sample.txt | sort | uniq -c
   1040 1
    985 10
    976 2
   1012 3
    981 4
    999 5
   1043 6
    974 7
    979 8
   1011 9

我没有检查样本大小的分布,但感觉是一个很好的随机分布。