如何制作脚本来生成文件并从百分比分布中插入文本?

时间:2013-04-26 21:26:17

标签: perl bash

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

我需要从1 to 9a to zA 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下

3 个答案:

答案 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不是一个很好的随机来源,但它可能很好。