0

サイズが約 1MB の大きなテキスト ファイルを作成する必要があります。Echo を使用したシェル スクリプトで、do ループを使用してファイルを作成してみました。ビルドには長い時間がかかりました。

unix/Linux で 1 行/レコードのファイルを作成しようとしています。サイズが 1MB の大きな文字列になる可能性があります。

コンテンツは次のようになりますが、1 メガバイトの場合は次のようになります。

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

キャラクターごとにビルドすると、時間がかかります。

これを10MB、20MB .... 60MBに拡張したいと思います。

シェル スクリプトが最適なオプションですか、それともより高速なオプションはありますか?

4

4 に答える 4

6

unixddコマンドはまさにこの目的のために作成されました。

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

小さなプログラムを作成して、目的の塗りつぶし文字 (このX例では) を改行なしで STDOUT に継続的に出力できます。その結果をパイプし、正確に正しいファイル サイズが得られるようにパラメータとパラメータddを指定します。bscount

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と、与えられたものは何でも取得していることがわかりますが、プロデューサーはそれほど高速ではありません。(おそらくyesawkは最適な組み合わせではありません)。

それよりも速くする必要がある場合は、おそらく他のインターフェイスを検討する必要がありますmmap

于 2013-08-03T03:08:47.147 に答える
1

「dd」コマンドを使用できます

以下の例を参照してください

dd if=/dev/zero of=LARGE_FILE bs=1M count=10000

于 2013-08-03T03:39:41.977 に答える