我是bash / perl脚本的真正新手,但我必须找到解决这个问题的方法。
我需要从1 to 9
,a to z
和A to Z
生成以英文字母命名的文件。
所以总共会有61个文件。
之后,我需要根据预定义的分布向每个文件插入文本,例如:
text1 80%
text2 10%
text3 5%
text4 2%
text5 2%
text6 1%
当每个文件只包含一个文本时,例如,名为C
的文件有80%的可能包含文本text1
。同样,名为7
的文件将有5%的机会包含文本text3
。
我的问题是从哪里开始?什么是首选的bash或perl?我认为生成文件会有些简单,但根据分发将文本回显到文件将会非常棘手。
这就是我在使用bash的地方:
创建文件并输入相同的文字:
for f in {a..z} {A..Z} {1..9}
do
echo text > "$f"
done
编辑:它在ubuntu 10.4下
答案 0 :(得分:1)
这个Perl程序可以满足您的要求。
它首先获取您在问题中显示的文本,并将其配对为数组中的文本/百分比对。子程序gentext
使用此数据以给定的速率生成随机字符串。
然后所要做的就是运行创建文件的循环并在每个循环中输入一个随机字符串。
use strict;
use warnings;
my @rates = map [ /(\S+(?:\s+\S+)*)\s+(\d+)%?\s*$/ ], split /\n/, <<END;
text1 80%
text2 10%
text3 5%
text4 2%
text5 2%
text6 1%
END
for my $file ('a' .. 'z', 'A' .. 'Z', '0' .. '9') {
open my $fh, '>', $file or die $!;
print $fh gentext(), "\n";
}
sub gentext {
my $rn = rand() * 100;
for (@rates) {
$rn -= $_->[1];
return $_->[0] if $rn < 0;
}
}
答案 1 :(得分:0)
我不确定我的问题是对的。但我认为你要搜索的是一个基本的随机数发生器。也许这可以帮助你: http://perldoc.perl.org/functions/rand.html
祝你好运
答案 2 :(得分:0)
在bash中创建文件是微不足道的,填充它们并不是那么干净但是并不是那么糟糕:
for file in {1..9} {a..z} {A..Z}; do
(
line=$((RANDOM % 100))
if (( line < 80 )); then
echo text1
elif (( line < 90 )); then
echo text2
elif (( line < 95 )); then
echo text3
[...]
fi
) >$file
done
$RANDOM
不是一个很好的随机来源,但它可能很好。