我有以下文件:
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。
答案 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
并指向包含0
和1
import random
binaryChoice = ['0','1']
field = ('0/1')
if field == ('0/1'):
choice = random.choice(binaryChoice)
print (choice)