AWK在满足条件时随机选择2个动作中的1个

Fat*_*gol 2 bash awk

当我的条件满足时,我可以用文件中的另一个替换一个值:

awk '{if (length($4)*2+1 != length($5) && $10 ~ /^1\/2/) sub("1/2","1/1"); print}' MyFile
Run Code Online (Sandbox Code Playgroud)

在我的2个条件为真的行中,将“ 1/2”替换为“ 1/1”。

我的文件中有几种这样的情况,我真正想做的是在大约一半的情况下用“ 1/1”替换“ 1/2”,而用“ 2/2”替换“ 1/2”在大约另一半情况下。也就是说,随机选择2种可能的动作之一sub("1/2","1/1")sub("1/2","2/2")。这有可能吗?

非常感谢!

gle*_*man 5

awk '
    length($4)*2+1 != length($5) && $10 ~ /^1\/2/ {
        sub("1/2", rand() < 0.5 ? "1/1" : "2/2")
        print
    }
' MyFile
Run Code Online (Sandbox Code Playgroud)

  • 添加`BEGIN {srand()}`可能会有用。如果每次在同一输入文件上运行脚本时都需要不同的输出,则很有必要。 (5认同)