为什么 AWK 中的随机数在第一次运行后不会改变?

c4f*_*t0r 5 linux ubuntu awk

我正在学习AWK,当我第二次使用以下命令时,为什么数字总是相同?

第一次运行:

awk 'BEGIN{for(i=1;i<=10;i++) print int(101*rand())}'
24
29
85
15
59
19
81
17
48
15
Run Code Online (Sandbox Code Playgroud)

第二次运行:

awk 'BEGIN{for(i=1;i<=10;i++) print int(101*rand())}'
24
29
85
15
59
19
81
17
48
15
Run Code Online (Sandbox Code Playgroud)

Pau*_*ane 15

来自https://www.gnu.org/software/gawk/manual/html_node/Numeric-Functions.html

注意:在大多数 awk 实现中,包括 gawk rand(),每次运行 awk 时都会从相同的起始数字或种子开始生成数字。因此,程序每次运行时都会生成相同的结果。这些数字在一次 awk 运行中是随机的,但可以从运行到运行进行预测。这对调试很方便,但是如果您希望程序每次使用时都做不同的事情,则必须将种子更改为每次运行时不同的值。为此,请使用srand().

  • awk 'BEGIN { "日期 +%N" | getline 种子;srand(种子);打印 rand(); }'; 使用纳秒作为种子 (3认同)
  • 只要确保每次运行只使用一次 `srand()`,而不是每次调用 `rand()` 一次。我见过的另一个陷阱是在一个程序中使用 `srand(time())`,该程序可以在同一秒内运行多次,因此在该秒启动的所有实例中仍然获得相同的种子。 (2认同)