假设我创建了一个包含 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
)一定百分比的时间?
你可以尝试(用GNU
awk
测试):
yes "foo bar" | awk 'BEGIN {srand()} {print rand() < 0.3 ? "" : $0}' | head -n10