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

Bash脚本编号生成器

发布时间:2020-12-15 22:01:46 所属栏目:安全 来源:网络整理
导读:我需要生成特定格式的随机数作为测试数据.例如,给定数字“n”我需要产生“n”个随机数并将它们写入文件中.该文件每行最多包含3个数字.这是我有的: #!/bin/bashm=$1output=$2for ((i=1; i= m; i++)) do echo $((RANDOM % 29+2)) $outputdone 这输出数字为:
我需要生成特定格式的随机数作为测试数据.例如,给定数字“n”我需要产生“n”个随机数并将它们写入文件中.该文件每行最多包含3个数字.这是我有的:

#!/bin/bash

m=$1
output=$2

for ((i=1; i<= m; i++)) do
    echo $((RANDOM % 29+2)) >> $output
done

这输出数字为:

1
2
24
21
10
14

而我想要的是:

1 2 24
21 10 14

谢谢您的帮助!

解决方法

纯bash(写成函数而不是脚本文件)

randx3() {
  local d=$'  n'
  local i
  for ((i=0;i<$(($1 - 1));++i)); do
    printf "%d%c" $((RANDOM%29 + 2)) "${d:$((i%3)):1}"
  done
  printf "%dn" $((RANDOM%29 + 2))
}

请注意,它不带文件参数;而是输出到stdout,所以你会像这样使用它:

randx3 11 > /path/to/output

这种风格通常更灵活.

这是一个不那么hacky的,它允许您选择你想要换行的频率:

randx() {
  local i
  local m=$1
  local c=${2:-3}
  for ((i=1;i<=m;++i)); do
    if ((i%c && i<m)); then
      printf "%d " $((RANDOM%29 + 2))
    else
      printf "%dn" $((RANDOM%29 + 2))
    fi
  done
}

将其称为randx 11或randx 11 7(第二个参数默认为3).

(编辑:李大同)

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

    推荐文章
      热点阅读