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 倍。
除此以外:
kill $(pgrep -f /path/to/unique_generator.py)
Run Code Online (Sandbox Code Playgroud)
应该做的工作。
制作随机字符行的最简单的单行:
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)
等等等等。您甚至可以将输出传递给另一组base64或sha256sum命令,使它们更加随机。
对于那些喜欢 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)
这也避免了与外壳上的循环相关的性能问题。