用BASH shell中的awk生成随机数

前端之家收集整理的这篇文章主要介绍了用BASH shell中的awk生成随机数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望随机地将文件的行(行)随机打印,然后打印到不同的五个文件.

但我一直在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
原文链接:https://www.f2er.com/bash/387086.html

猜你在找的Bash相关文章