如何在 bash 中用空字符串替换 30% 的随机行?

问题描述 投票:0回答:1

假设我创建了一个包含 10 行的文件:

yes "foo bar" | head -n 10 > foobar.txt

[出]:

foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar

我想用空行随机替换 30% 的行,如下所示:

foo bar

foo bar

foo bar

foo bar
foo bar

foo bar

从技术上讲,我可以编写一个 python 脚本来生成随机数并执行

ratio-foobar.sh

#!/bin/bash

ratio=$1
numlines=$2

coinflip() {
  randnum=$(bc -l <<< $(python -S -c "import random; print(int(random.random() * 100))"))
  if [ $randnum -gt $ratio ]
  then 
     return 1
  else
     return 0
  fi
}

for i in $(seq 1 $numlines);
do
  if coinflip
  then
    echo "foo bar"
  else
    echo ""
  fi
done

用途:

bash ratio-foobar.sh 33 10 > foobar.txt

[出]:

foo bar
foo bar
foo bar

foo bar


foo bar
foo bar


但是有没有一种更简单的方法来生成(也许使用

yes
)一定百分比的时间?

python bash random echo
1个回答
0
投票

你可以尝试(用GNU

awk
测试):

yes "foo bar" | awk 'BEGIN {srand()} {print rand() < 0.3 ? "" : $0}' | head -n10
© www.soinside.com 2019 - 2024. All rights reserved.