使用awk替换带随机数的字符串

时间:2012-06-02 16:25:20

标签: variables random awk gsub

我目前正在尝试创建一个脚本,该脚本将在新的IP范围内启动vpn服务器。我有多台服务器,因此如果两台服务器使用相同的范围,则可能会发生冲突。

因此,我想随机启动服务器启动的IP范围。我希望在生成的配置文件中以下列方式随机化IP;

    ifconfig 10.xxx.yyy.1 255.255.255.248
    server 10.xxx.yyy.0 255.255.255.248

我使用的shell非常受限制,因此许多实用程序(如od)无法创建随机数。但是awk可用,所以我认为这是合适的。我已经尝试创建一个命令,用0到255之间的随机数替换xxx和yyy,但我还没有成功。任何人都可以帮我这个吗?

    awk '{var = int(rand() * 256); var2 = int(rand() * 256);  gsub(/xxx/, var ); gsub(/yyy/, var2 ) ; print}' /tmp/vpn.conf

此命令将值更改为

    ifconfig 10.125.248.1 255.255.255.248
    server 10.74.196.0 255.255.255.248

这显然是不可取的,因为xxx和yyy都应该相同,例如

    ifconfig 10.25.64.1 255.255.255.248
    server 10.25.64.0 255.255.255.248

任何人都可以帮助awk执行预期的功能吗?或者,任何简化的随机数脚本也足够了,但由于缺少可用的shell实用程序,我不希望这样做。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

生成BEGIN块中的随机数。

awk 'BEGIN{var = int(rand() * 256); var2 = int(rand() * 256)}  {sub(/xxx/, var ); sub(/yyy/, var2 ) ; print}' /tmp/vpn.conf

此外,我没有理由使用gsub,只使用sub,因为特定模式的每一行只有一次替换。