如何从无限重复一组单词的终端创建文件?我需要它来创建一个巨大的文件来进行解析,例如 2-4GB 大小。目前我正在手动将粘贴行复制到同一个文件中以增加大小。
hob*_*bbs 53
有一种简单的方法可以使用以下yes
命令多次重复一行:
yes we have no bananas | head -n 10000 > out.txt
Run Code Online (Sandbox Code Playgroud)
将导致 out.txt 包含 10,000 行都说“我们没有香蕉”。
要将输出限制为确切的字节数,请使用head
's-c
选项而不是-n
. 例如,这将生成正好 10 kB 的文本:
yes we have no bananas | head -c 10000 > out.txt
Run Code Online (Sandbox Code Playgroud)
Zan*_*nna 10
我不能推荐无限重复的文本,但你可以像这样用 python 制作一个 ~2GB 的重复文本文件......
python3 -c 'with open("bigfile", "w") as f: f.write(("hello world "*10+"\n")*2*10**7)'
Run Code Online (Sandbox Code Playgroud)
这将打印 "hello world" 10 次并换行,然后重复 20,000,000 次,将结果写入文件bigfile
。如果您的所有字符都是 ASCII,那么每个字符都是一个字节,因此请根据您要写的内容进行适当计算...
您的 CPU 可能已被拥有。如果我尝试执行超过 10,000,000 行,我就会耗尽 RAM...
虽然我正在运行烤面包机
ter*_*don 10
Perl 有一个漂亮的x
操作符:
$ perl -e 'print "foo\n" x 5'
foo
foo
foo
foo
foo
Run Code Online (Sandbox Code Playgroud)
因此,作为一个简单的解决方案,您只需写几百万次即可。例如,此命令创建了一个 3G 文件:
perl -e 'print "This is my line\n" x 200000000' > file
Run Code Online (Sandbox Code Playgroud)
如果您需要指定确切的大小(在这种情况下为 2 GiB),您可以执行以下操作:
perl -e 'use bytes; while(length($str)<2<<20){ $str.="This is my line\n"} print "$str\n"' > file
Run Code Online (Sandbox Code Playgroud)
将要重复的一组单词放在一个文件中,例如source.txt
. 获取 , 的大小source.txt
,以字节为单位,例如:
stat -c '%s' source.txt
Run Code Online (Sandbox Code Playgroud)确定目标文件的大小,例如destination.txt
2 GB 或 4 GB 或其他大小。以字节为单位转换大小。
将目标文件大小除以源文件大小。 bash
不能进行浮点运算,但在这种情况下不需要。
使用for
构造重复cat source.txt
除法结果次数的运算。这将最接近您可以通过重复获得的目标文件大小。操作的输出保存在destination.txt
.
例如,假设source.txt
is 为 30 个字节,并且我们要创建一个 2 GB 的文件,我们需要:
for ((i=0; i<=((16777216/30)); i++)); do cat source.txt; done >destination.txt
Run Code Online (Sandbox Code Playgroud)
这里我((16777216/30))
在初始化时设置上限;你可以得到结果并将它放在这里。
手术需要一些时间;越大source.txt
,需要的时间就越少。
您还可以使用while
-loop。
示例:内容foo.txt
(这是您的来源):
foo
bar
foobar
Run Code Online (Sandbox Code Playgroud)
bar.txt
为空(这是您的目标文件)。您现在可以使用以下循环将foo.txt
多次的内容写入bar.txt
:
while [ $(stat --format "%s" bar.txt) -lt 150 ]
do
cat foo.txt >> bar.txt
done
Run Code Online (Sandbox Code Playgroud)
解释:
stat --format "%s" bar.txt
bar.txt
以字节为单位显示大小。while [ $(stat --format "%s" bar.txt) -lt 150 ]
将重复以下操作,直到达到目标大小(在本例中为 150 字节)。cat foo.txt >> bar.txt
将内容附加foo.txt
到bar.txt