【问题标题】:random but unique numbers in aixaix 中随机但唯一的数字
【发布时间】:2014-05-29 14:06:12
【问题描述】:

我正在编写一个脚本,我需要特定数量的唯一数字(这个数量由单词列表给出),每个数字有 5 位不变。

我的第一次尝试是:

 test=`cat amount.log`

 for i in $test

       do 

           echo  $i $((RANDOM%10000+20000)) > random_numbers.log

 done

这个脚本的输出正是我正在寻找的那个:

word1 25439
word2 26134
word3 21741

但我不相信 $random 变量会给我一个唯一的列表,我没有写过不止一次的数字。 可以肯定的是,这些数字是唯一的,我的第一次尝试是使用sort -u 来删除重复的条目,但这意味着我的数字可能比列表中的单词少,或者我需要运行的一些单词再次执行该脚本,为其获取一个唯一编号。

我会很感激任何建议,它需要在 unix/aix ksh shell 中完成。

【问题讨论】:

    标签: random numbers unique aix


    【解决方案1】:

    您可以通过在输出文件中查找每个数字来确保每个数字都是唯一的...

    test=`cat amount.log`
    
    touch random_numbers.log
    
    for i in $test
    do
            while true
            do
                    num=$((RANDOM%10000+20000))
                    grep $num random_numbers.log > /dev/null
                    if [[ $? -gt 0 ]]
                    then
                            break
                    fi
            done
            echo $i $num >> random_numbers.log
    done
    

    【讨论】:

    • 我试过你的答案,但 grep 给我回它无法打开文件。尽管如此,它可能也有效,因为我用 awk und sort -u 查看了这些数字,它们似乎是独一无二的。这次尝试可能只是运气好,还是 grep 会返回错误消息?
    • 可能 grep 抱怨,因为该文件在第一次运行时不存在。我已经编辑了答案。
    • 谢谢你,@Roberto,这正是我想要的。多次尝试没有重复的条目。最后一个问题,你能解释一下if [[ $? -gt 0 ]]具体做什么吗?我不明白那部分。
    【解决方案2】:

    查看How to generate a list of unique random strings? 的答案,其中一个想法应该对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多