我们需要构建一个大约 1MB 的大型文本文件。我们尝试使用 Echo 使用 shell 脚本来使用 do 循环创建文件。构建时间很长。
我希望在 unix/Linux 中构建文件 1 行/记录。它可能是一个 1MB 大小的大字符串。
内容可能看起来像这样,但对于整个兆字节:
XXXXXXXXX............................................XXXX
如果我逐个字符构建,则需要更长的时间。
我想将其扩展到 10MB、20MB .... 60MB。
shell 脚本是最好的选择,还是有更快的选择?
最佳答案
unix dd
命令正是为此目的而设计的。
http://en.wikipedia.org/wiki/Dd_%28Unix%29
您可以编写一个小程序来连续将您想要的填充字符(在您的示例中为 X
)打印到 STDOUT 而无需换行。将结果通过管道传输到 dd
并指定 bs
和 count
参数,以便您获得完全正确的文件大小。
然后您可以调整 bs
和 count
参数来找到最大吞吐量。
编辑:示例:
yes X | awk '{ printf("%s", $0)}' | dd of=out.txt bs=1024 count=1024 2>/dev/null
你可以看到它相当快:
time yes X | awk '{ printf("%s", $0)}' | dd of=out.txt bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.123118 s, 8.5 MB/s
real 0m0.127s
user 0m0.144s
sys 0m0.004s
通过管道的不同部分移动 time
向我表明 dd
正在接受您提供的任何内容,但生产者不是很快。 (也许 yes
和 awk
不是最佳组合)。
如果您需要比这更快,也许您需要考虑其他接口(interface),例如 mmap
。
关于linux - 构建一个包含大字符串的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028820/