【问题标题】:How to add random number using awk command? [closed]如何使用 awk 命令添加随机数? [关闭]
【发布时间】:2017-09-12 17:57:52
【问题描述】:

例如,我有一个包含以下行的文件。

A,B,C
E,F,G
H,I,J

我想要如下输出。

A,B,C,0
E,F,G,1
H,I,J,2

我想在最后添加一个随机数。任何人都可以帮助我吗?

【问题讨论】:

  • 什么样的随机性?平均分配?你试过什么了?什么不起作用?
  • 0, 1, 2 看起来不是很随机......你确定你的意思是随机而不是顺序?
  • 相关:xkcd.com/221
  • 你说:The number should n't be repeated next time .即使可能性很小,即使是完美的随机生成器也可以连续两次产生相同的输出。这就是随机性的本质。如果您需要确保相同的数字不会重复,您需要一个序列生成器,以确保它产生的任何数字都只会产生一次。

标签: awk


【解决方案1】:

awk 来救援!

您要添加的不是随机数,而是序列号(随机数可能会发生冲突)

这是带有测试用例的脚本

$ printf "%s\n" {A..I} | paste -d, - - - | 
  awk '{print $0 "," NR-1}'

A,B,C,0
D,E,F,1
G,H,I,2

【讨论】:

    【解决方案2】:

    根据条件:

    • 最后添加一个随机数

    • 号码下次不要重复

    使用 randomizer 生成随机整数的 awk 解决方案:

    awk 'function randint(n){ return int(n * rand()) }
         BEGIN{ FS=OFS="," }
         { 
             rn=randint(++c);            # rn - random number 
             if (rn in a) {              # if the number had been shown before
                 do { 
                     rn=randint(c+3*2)   # generate new random number
                 } 
                 while (rn in a)         # until a unique number is obtained
             } 
             a[rn]; $4=rn                # add new random number as last field
         }1' file
    

    示例输出:

    A,B,C,0
    E,F,G,6
    H,I,J,5
    

    【讨论】:

      【解决方案3】:

      看起来你想要的是一个顺序的数字。这是一个 awk 解决方案:

      awk '{printf "%s,%s\n", $0, p++}' input.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        • 1970-01-01
        • 2014-07-06
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        相关资源
        最近更新 更多