在两种可能性之间随机选择

时间:2016-07-06 12:43:21

标签: python bash random awk

我有以下文件:

452 0/0 10 30 40 
460 0/1 0 40 40
500 0/0 5 35 40
600 0/1 15 25 40
800 1/1 40 0 40

真实文件包含数百万行。如果第二个字段是0/0,我打印第3和第5列。如果第二个字段是1/1,我打印第4和第5列。使用此命令:

awk 'BEGIN{OFS="\t"}{ if($2=="0/0") {print $1, $2, $3, $5} else if($2=="1/1") {print $1, $2, $4, $5}}' file

问题是当第二个字段是0/1时。我想随机选择0或1,如果选择0,则打印第3和第5列,如果选择1,则打印第4和第5列。

每次有0/1时,有没有办法随机选择0或1?代码可以是awk,bash或python。

2 个答案:

答案 0 :(得分:2)

使用paxdiablo的Random numbers generation with awk in BASH shell技巧,你可以说:

awk -v seed=$RANDOM 'BEGIN {srand(seed)}
          $2=="0/0" {chosen=3}
          $2=="1/1" {chosen=4}
          $2=="0/1" {chosen=3+int(rand()+0.5)}
          {print $chosen, $5}' file

chosen我们存储3或4.使用chosen=3+int(rand()+0.5)我们得到3或4。

让它看起来有用:

$ awk -v seed=$RANDOM 'BEGIN {srand(seed)} $2=="0/0" {chosen=3} $2=="1/1" {chosen=4} $2=="0/1" {chosen=3+int(rand()+0.5)} {print $chosen, $5}' a
10 40
40 40
5 40
25 40
0 40
$ awk -v seed=$RANDOM 'BEGIN {srand(seed)} $2=="0/0" {chosen=3} $2=="1/1" {chosen=4} $2=="0/1" {chosen=3+int(rand()+0.5)} {print $chosen, $5}' a
10 40
40 40
5 40
15 40
0 40

答案 1 :(得分:0)

使用python的解决方案:您可以使用random并指向包含01

的列表
import random

binaryChoice = ['0','1']
field = ('0/1')
if field == ('0/1'):
    choice = random.choice(binaryChoice)
    print (choice)