gpt4 book ai didi

awk - 在 BASH shell 中使用 awk 生成随机数

转载 作者:行者123 更新时间:2023-12-04 13:08:56 25 4
gpt4 key购买 nike

我希望随机打乱文件的行(行),然后打印到不同的五个文件。

但是我一直在file1到file5中出现完全相同的行顺序。随机生成过程不能正常工作。我将不胜感激任何建议。

#!/bin/bash
for i in seq 1 5
do
awk 'BEGIN{srand();} {print rand()"\t"$0}' shuffling.txt | sort -k2 -k1 -n | cut -f2- > file$i.txt
done

输入shuffling.txt
111 1032192
111 2323476
111 1698881
111 2451712
111 2013780
111 888105
112 2331004
112 1886376
112 1189765
112 1877267
112 1772972
112 574631

最佳答案

如果您不向 srand 提供种子,它将使用当前日期和时间或固定的起始种子(这可能因实现而异)。这意味着,对于前者,如果您的进程运行得足够快,它们都将使用相同的种子并生成相同的序列。

而且,对于后者,无论您等待多长时间,每次运行都会得到相同的序列。

您可以使用 shell 提供的不同种子来解决其中任何一个问题。

awk -v seed=$RANDOM 'BEGIN{srand(seed);}{print rand()" "$0}' ...

号码由 $RANDOM提供每次迭代都会发生变化,因此每次运行 awk程序获得不同的种子。

您可以在以下成绩单中看到这一点:
pax> for i in $(seq 1 5) ; do
...> awk 'BEGIN{srand();print rand()}'
...> done
0.0435039
0.0435039
0.0435039
0.0435039
0.0435039

pax> for i in $(seq 1 5) ; do
...> awk -v seed=$RANDOM 'BEGIN{srand(seed);print rand()}'
...> done
0.283898
0.0895895
0.841535
0.249817
0.398753

关于awk - 在 BASH shell 中使用 awk 生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com