こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

sortコマンドについて

いつもお世話になっております。
sortコマンドについて質問させて下さい。

現在UNIXコマンドのsortによってファイルをソートしようとしています。
ソート対象となるファイルは下記の通りです。
ファイルの種類:csvファイル
ファイルサイズ:80MByte
1レコード長:48Byte
レコード数:120万レコード
レコード例:
2,1000 ,1,10C0,15,0000000100000000000000000000000000000000
2,1117 ,1,10B0,16,0000000300000000000000000000000100000000




そこで下記のようなコマンドにてソートしています。
sort -t, -k 1,1 -k 2,2 -k 3,3 -k 4,4 < fileA.csv > fileB.csv

すると「sort:0653-657ソート中に書込みエラーが発生しました。」と出力され中断してしまいます。
自分なりにsortコマンドについて調べてみたところ、
/usr/tmpディレクトリのファイルシステムがいっぱいになることでコマンドが失敗しているようです。
(一時的にそのディレクトリにソート内容を展開しているようでした)

社内にて/usr/tmpディレクトリのファイルシステムの拡張を求めたところ「できない」と言われてしまいました。
開発の最終段階でのボリュームテストを行ったときの障害でしたので、
処理を大幅に変更するような対処は出来ない状況です。

代替方法などありましたらご教示頂きたいと思います。
以上、宜しくお願い致します。

投稿日時 - 2007-12-03 22:05:38

QNo.3568734

すぐに回答ほしいです

質問者が選んだベストアンサー

man sort に載ってますが、-T オプションでワークディレクトリを別の場所に指定できます。

そもそもどこにも必要容量のワークを確保できない場合は、対象ファイルを小さく分割して、それぞれソートし、出来た分割ソート済みファイルを sort -m でマージするといいです。sort -m だとワークを使いませんので。

投稿日時 - 2007-12-03 22:30:18

お礼

ご回答有難うございました。
man sortを確認出来ていませんでした。
-T オプションを用いワークディレクトリを指定したところ、
正常に動作致しました。
また、ファイルシステム的に大きなディレクトリをいつまで確保できるかわかりませんので、
稼動後、sort -m についても検討してみようと思います。

投稿日時 - 2007-12-04 11:07:32

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

ウチの環境は FreeBSD ですが man sort すると

-T --temporary-directory=DIR
use DIR for temporaries, not $TMPDIR or /tmp; multiple options
specify multiple directories

とあります。
/usr/tmp 以外で空いているディレクトリがあれば、
そこを指定してみてはどうでしょうか?

投稿日時 - 2007-12-03 22:26:48

お礼

ご回答有難うございます。
-T オプションに指定してもよいというディレクトリを提供して頂けたので、
解決することが出来ました。
80Mbyteのファイルをソートするのにこんなに多くの容量を必要とするとは思ってもいませんでした;
大変参考になりました。

投稿日時 - 2007-12-04 11:13:51

あなたにオススメの質問