用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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...