2013-04-26 69 views
1

我是一個真正的新手bash/perl腳本,但必須想出解決這個問題的辦法。如何使腳本生成文件並從百分比分佈插入文本?

我需要從1 to 9a to zA to Z生成以英文字母命名的文件。 所以總共會有61個文件。

之後,我需要根據預定義的分配插入文本到每一個文件,說:

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

當每個文件只包含一個文本,並從例子是有80%的機會例如名爲C的文件將包含文本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

創建文件是在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並不是一個很好的隨機性來源,但對此可能很好。

+0

使用這個腳本得到'text3'的概率是0.2 * 0.9 * 0.05 ='0.009'。 – Tom 2013-04-26 21:55:25

+0

@你是說你只想要其中的一行,而不是獨立的概率? – Kevin 2013-04-26 21:59:19

+0

是的。每個文件將只包含一行文本。 – Tom 2013-04-26 22:00:13

0

我不知道我你的問題得到了解決。但我認爲你正在尋找的是一個基本的隨機數發生器。也許這可以幫助你: http://perldoc.perl.org/functions/rand.html

好運

+0

我試圖在Ubuntu下生成文件並向它們插入文本。 – Tom 2013-04-26 21:31:36

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; 
    } 
}