在两种可能性中随机选择

2024-04-23 09:54:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下文件:

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,则打印第三列和第五列。如果第二个字段是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。你知道吗


Tags: 文件方法代码命令bashifelsefile
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

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

import random

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

相关问题 更多 >