2013-08-03 31 views
0

我們需要構建一個大小約爲1MB的大文本文件。我們使用Echo嘗試使用shell腳本使用do循環創建文件。花了很長時間來建設。用大字符串構建文件

我期待在unix/Linux中創建一個文件1行/記錄。它可能是一個1MB大小的字符串。

內容看起來可能是這樣,但對於整個兆字節:

XXXXXXXXX............................................XXXX 

如果我的性格塑造性格,它需要較長的時間。

我想把它擴展到10MB,20MB .... 60MB之後。

是一個shell腳本的最佳選擇,還是有更快的選擇?

+1

製作一個小程序(在編譯語言像C或Ocaml)編寫這樣的文件比在論壇上提問更快。 –

回答

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 

你可以看到,這是相當快:

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正在採取什麼你給它,但製片人不是很快。 (也許yesawk不是最好的組合)。

如果您需要比這更快,也許您需要考慮其他接口,例如mmap

+2

這個小程序存在。使用'是(1)' –

+0

感謝您的回覆/評論。你有你的建議的示例代碼? – user2647763

0

可以用 「DD」 命令

見下文

DD例如,如果=的/ dev/= LARGE_FILE BS = 1M的零計數= 10000

+0

構建一個大的零填充文件,而不是一個大的文本文件。 –

+0

謝謝。是否有任何替代dd? – user2647763