1

我是一个真正的 bash/perl 脚本新手,但我必须想出一个解决这个问题的方法。

1 to 9我需要从和生成以英文字母命名的a to z文件A to Z。所以总共会有61个文件。

之后,我需要根据预定义的分布向每个文件插入文本,比如:

text1 80%
text2 10%
text3 5%
text4 2%
text5 2%
text6 1%

当每个文件只包含一个文本时,从示例中,名为 example 的文件有 80% 的机会C包含 text text1。同样,命名的文件7将有 5% 的机会包含文本text3

我的问题是从哪里开始?什么是首选 bash 或 perl?我认为生成文件会有些容易,但根据分布将文本回显到文件会很棘手。

这是我使用 bash 的地方:

创建文件并输入相同的文本:

for f in {a..z} {A..Z} {1..9}
do
    echo text > "$f"
done

编辑:它在 ubuntu 10.4 下

4

3 回答 3

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;
  }
}  
于 2013-04-26T22:46:42.713 回答
0

我不确定我的问题是否正确。但我认为您正在寻找的是一个基本的随机数生成器。也许这可以帮助你: http: //perldoc.perl.org/functions/rand.html

祝你好运

于 2013-04-26T21:30:12.803 回答
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不是随机性的重要来源,但这可能没问题。

于 2013-04-26T21:49:50.137 回答