使用终端制作大文件

Ava*_*eka 7 command-line files ram

我想制作一个非常大的文件用于测试目的,它应该包含唯一的单词(严格不重复)。它可以在 GB、TB 等中使用。我可以在终端上执行此操作吗?

我正在使用Ubuntu 16.04(Xenial Xerus)。

Jac*_*ijm 12

创建无限数量的单词,保证唯一

下面的脚本将从字母表中的字符生成有保证的唯一单词。任何固定长度字符的问题在于它会产生一组有限的可能性,从而限制了文件的大小。

因此,我使用了python's permutations,它会产生(有限)数量的唯一单词。然而,在使用所有组合后,我们简单地重新开始,打印单词 2,然后是 3、4、n次等,每个值n都会创建一个新的唯一单词。因此,我们有一个生成器来生成 100% 肯定唯一的单词。

剧本:

import itertools
import string

ab = [c for c in string.ascii_lowercase]

t = 1
while True:   
    for n in range(1, len(ab)+1): 
        words = itertools.permutations(ab, n)
        for word in words:
            print(t*("".join(word)))
    t += 1
Run Code Online (Sandbox Code Playgroud)

如何使用

  • 只需将脚本复制到一个空文件中,将其另存为 unique_generator.py
  • 通过以下命令运行它:

    python3 /path/to/unique_generator.py > /path/to/bigfile.txt
    
    Run Code Online (Sandbox Code Playgroud)

笔记

该脚本产生各种长度的独特单词。如果需要,可以通过更改行来设置开始或最大长度:

for n in range(1, len(ab)+1)
Run Code Online (Sandbox Code Playgroud)

(替换范围的开始),并更改:

while True:  
Run Code Online (Sandbox Code Playgroud)

进入(例如):

while t < 10:   
Run Code Online (Sandbox Code Playgroud)

在最后一种情况下,单词的长度最多是字母表的 10 倍。

结束进程


Ser*_*nyy 6

制作随机字符行的最简单的单行:

while true; do echo $RANDOM | base64 >> BIGFILE.txt  ; done
Run Code Online (Sandbox Code Playgroud)

或者:

while true; do echo $RANDOM | sha512sum  >> BIGFILE.txt ; done   
Run Code Online (Sandbox Code Playgroud)

为了更好的唯一性,您可以使用/dev/urandom

cat /dev/urandom | base64 
Run Code Online (Sandbox Code Playgroud)

当您的文件达到所需大小时,使用 Ctrl+C 终止命令

还要考虑随机字符串/密码生成器

因此,那里的答案之一可以调整为:

while true; do openssl rand -base64 20 ; done
Run Code Online (Sandbox Code Playgroud)

如果您不想使用标点符号和数字,而只想使用字母,那么我们可以使用以下方法tr进行更正:

while true; do openssl rand -base64 20 | tr -d '[[:digit:]][[:punct:]]'  ; done 
Run Code Online (Sandbox Code Playgroud)

为了获得额外的随机性,您可以使用 对生成的字符串的字符进行混洗shuf

while true; do openssl rand -base64 20 | fold -w1 | shuf | tr -d '\n' ; done
Run Code Online (Sandbox Code Playgroud)

等等等等。您甚至可以将输出传递给另一组base64sha256sum命令,使它们更加随机。

对于那些喜欢 shell 以外的替代语言的人,这里有一个 Python 单线:

python -c $'import string,random;i = [i for i in string.uppercase + string.lowercase + string.digits];\nwhile not random.shuffle(i): print "".join(i)'
Run Code Online (Sandbox Code Playgroud)


小智 6

要获取一个包含随机单词的大文件,请使用以下命令:

cat /dev/urandom | head -c 1000000 | tr -dc "A-Za-z0-9\n" | sort | uniq
Run Code Online (Sandbox Code Playgroud)

这将创建一个文件,每行都有一个独特的单词和随机文本字符串。您可以通过使 1000 更大或更小来增加文件的大小。每个计数大约等于一个字节。

要使单词空格分隔,只需将它们通过tr "\n" " ".

cat /dev/urandom | head -c 1000000 | tr -dc "A-Za-z0-9\n" | sort | uniq | tr "\n" " "
Run Code Online (Sandbox Code Playgroud)

这也避免了与外壳上的循环相关的性能问题。

  • @CiprianTomoiaga:简短回答:产生新进程的成本很高。像 Serg 的回答那样的循环在每次迭代中都会这样做,可能是多次。这个答案重复使用相同的过程来完成所有工作。如需更长的答案,请提交网站问题;-) (2认同)