根据字典

时间:2017-09-21 16:59:51

标签: python bash random text

是否存在用于从包含在另一文件(例如,英语词典或圣经)上的随机单词生成特定大小(例如,1GB)的大文件的bash命令(或替代python模块)。

示例输入

Hello world.
How are you?
I am doing fine.

输出文件通常应大于"字典"输入文件。

理想情况下,我希望这些内容不要重复。

示例输出:

Hello fine. world.
How you?
I doing am are fine.
world.
How Hello you?
are doing I am fine.

上面的输出是原始文件大小的两倍(对不起,如果我跳过一个单词或标点符号我手工完成),但它只是以随机顺序包含在文件中。

我已尝试使用shuf和truncate命令作为其他建议作为类似任务的解决方案,但我不确定它们是否具有处理此问题的所有属性。

1 个答案:

答案 0 :(得分:0)

这里有一个你想要的概念。它将创建您需要的文件,而不是连续两次重复一行。唯一的问题是这不会是1GB。它将有几个字节。

#!/bin/bash

touch some_output.txt

stream_of_words=$(cat words.txt | tr '\n' '|' | sed 's/|$//g')
qty_of_words=$( echo "$stream_of_words" | awk -F'|' '{ print NF }' )
last_number_used=1
random_number=1
limit_in_bytes=1073741824
size_of_file=$( wc -c some_output.txt | awk '{print $1}' )

echo "qty_of_words : $qty_of_words "
echo "size_of_file : $size_of_file"

while [[ $size_of_file -lt $limit_in_bytes ]]
do

    while [[ $random_number == $last_number_used ]]
    do
        random_number=$( awk -v qty="$qty_of_words" 'BEGIN { srand(); random_number=( int( rand() * 10000000 ) % qty ) + 1; print random_number }' )
    done

    last_number_used=$random_number
    random_word=$( awk -v arr="$stream_of_words" -v rnd="$random_number" 'BEGIN { srand(); arr_length=split(arr,list,"|"); print list[rnd] }' )
    echo "$random_word" 
    echo "$random_word" >> some_output.txt

    size_of_file=$( wc -c some_output.txt | awk '{print $1}' )

    sleep 1
done

这是我使用的输出,但您可以根据需要更改短语:

$ cat words.txt
Banana
Apple
Peach
Watermelon
Onion
Potato
Orange

问候!