如何从无限重复一组单词的终端创建文件?

Nis*_*eet 20 command-line

如何从无限重复一组单词的终端创建文件?我需要它来创建一个巨大的文件来进行解析,例如 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)

  • 要以字节为单位指定限制,只需使用 `head -c 10000` 表示 10 kB 而不是 `head -n 10000` 表示 10k 行。 (4认同)
  • OP 想要处理字节,而不是行。 (2认同)

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...

虽然我正在运行烤面包机

  • @heemayl 是什么让您如此确定 OP 需要字节?这个问题本质上是说 OP 想要一个大文件。具体大小非常模糊(2-4GB),所以我真的怀疑是否有特定的字节限制。 (4认同)

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)


hee*_*ayl 7

  • 将要重复的一组单词放在一个文件中,例如source.txt. 获取 , 的大小source.txt,以字节为单位,例如:

     stat -c '%s' source.txt
    
    Run Code Online (Sandbox Code Playgroud)
  • 确定目标文件的大小,例如destination.txt2 GB 或 4 GB 或其他大小。以字节为单位转换大小。

  • 将目标文件大小除以源文件大小。 bash不能进行浮点运算,但在这种情况下不需要。

  • 使用for构造重复cat source.txt除法结果次数的运算。这将最接近您可以通过重复获得的目标文件大小。操作的输出保存在destination.txt.

例如,假设source.txtis 为 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,需要的时间就越少。


Way*_*Yux 6

您还可以使用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.txtbar.txt以字节为单位显示大小。
  • while [ $(stat --format "%s" bar.txt) -lt 150 ] 将重复以下操作,直到达到目标大小(在本例中为 150 字节)。
  • cat foo.txt >> bar.txt将内容附加foo.txtbar.txt