使用大字符串构建文件

use*_*763 0 unix linux string text large-files

我们需要构建一个大小约为1MB的大型文本文件.我们尝试使用Echo的shell脚本使用do循环创建文件.建立需要很长时间.

我想在unix/Linux中构建一个文件1行/记录.它可能是一个大小为1MB的大字符串.

内容可能如下所示,但整个兆字节:

XXXXXXXXX............................................XXXX
Run Code Online (Sandbox Code Playgroud)

如果我逐个字符地构建,则需要更长的时间.

我想将此扩展到10MB,20MB ......后来的60MB.

shell脚本是最好的选择,还是有更快的选择?

Dav*_*esh 5

unix dd命令完全是为了这个目的.

http://en.wikipedia.org/wiki/Dd_%28Unix%29

您可以编写一个小程序,X在没有换行符的情况下将所需的填充字符(在您的示例中)连续打印到STDOUT.将结果传递到dd并指定bscount参数,以便获得完全正确的文件大小.

然后,您可以调整bscount参数以查找最大吞吐量.

编辑:示例:

yes X | awk '{ printf("%s", $0)}' | dd of=out.txt bs=1024 count=1024 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

你可以看到它很快:

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
Run Code Online (Sandbox Code Playgroud)

time通过管道的不同部分移动指示我dd正在采取你给它的任何东西,但生产者不是很快.(也许是yesawk不是最好的组合).

如果你需要比这更快,也许你需要考虑其他接口,例如mmap.

  • 这个小程序存在.使用"是(1)" (2认同)