2017-09-21 62 views
0

是否有一個bash命令(或替代python模塊)用於從另一個文件中包含的隨機單詞生成特定大小文件(例如,1GB) ,英文字典或聖經)。生成基於字典的特定大小的文本文件(可讀)文件

示例輸入

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命令,但是我不確定它們是否具有處理此問題的所有屬性。

+0

請將示例輸入和您希望的輸出添加到您的問題的該示例輸入。 – Cyrus

+0

併發布字典結構/片段 – RomanPerekhrest

+0

所以它應該是比單個單詞更句子 – RomanPerekhrest

回答

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 

商祺!