繁体   English   中英

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

[英]Choosing randomly between two possibilities

我有以下文件:

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。

paxdiablo的BASH shell技巧中使用awk生成随机数 ,您可以说:

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

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

import random

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM