加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

用BASH shell中的awk生成随机数

发布时间:2020-12-15 19:01:34 所属栏目:安全 来源:网络整理
导读:我希望随机地将文件的行(行)随机打印,然后打印到不同的五个文件. 但我一直在file1到file5中出现完全相同的行顺序.随机生成过程无法正常工作.我会很感激任何建议. #!/bin/bashfor i in seq 1 5do awk 'BEGIN{srand();} {print rand()"t"$0}' shuffling.txt |
我希望随机地将文件的行(行)随机打印,然后打印到不同的五个文件.

但我一直在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读