• ベストアンサー

sortコマンドについて

mako-kwnshともうします。 タブで区切られたテキストファイルの 1番目と4番目の項目の昇順にソートしたいのですが可能なのでしょうか?

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

  • ベストアンサー
  • gaktank
  • ベストアンサー率65% (23/35)
回答No.3

(1)対象ファイルを数行だけ抽出して、そのファイルに対してsortしても同事象ですか? (一瞬でソートできるはずのファイルでやってみてください) (2)sort対象ファイルの1行が長い、改行コードがない、バイナリファイル、といった場合にinsufficient memory エラーが出やすいみたいですが、該当しますか?

mako-kwnsh
質問者

お礼

お返事ありがとうございます。 ファイルを調べると文字コードがShift-JIS でした。試しにEUCに変換してやると うまくいきました。Shift-JISでは だめなのでしょうか? とりあえず今は iconv -f shift-jis -t euc sort iconv -f euc -t shift-jis みたいにしてソートしています。 gaktankさん3度をお返事をいただいて 本当にありがとうございました。

その他の回答 (2)

  • gaktank
  • ベストアンサー率65% (23/35)
回答No.2

> insufficient memory; use -S option to increase allocation > というエラーが発生します。 -S オプションで、sortで使用するスワップメモリを指定してください。 ソート対象ファイルの2~3倍程度あれば大丈夫だと思います。 仮に20MBとするなら、 $ sort -S20m -k1,1 -k4,4 textfile です。 ちなみに、実際に使用できる仮想メモリ量より大きい値を指定すると、膨大な量のスワップが発生してパフォーマンスが悪くなるので、システムの実メモリ量を考慮した上で指定したほうがよいです。

mako-kwnsh
質問者

お礼

2度もお返事をいただき誠にありがとう ございます。 下記のコマンドを実行したのですが、 前回と同じようにエラーが出てしまいます。 ソートするファイルが悪いのでしょうか... sort -S25m -n -k1,1 -k5,5 ../data/from/PGCMCMWAKUTAB.TXT > ../data/from/PGCMTOKUBANTAB_WK.TXT

  • gaktank
  • ベストアンサー率65% (23/35)
回答No.1

こういうことですか? $ sort -k1,1 -k4,4 textfile

mako-kwnsh
質問者

お礼

お返事ありがとうございます。 教えていただいたコマンドを 実行してみたのですが、 insufficient memory; use -S option to increase allocation というエラーが発生します。 メモリ不足のエラーだと思うのですが、 メモリ不足になる原因がわからず 現在悩んでいます。 (ファイルは6MB程度)

関連するQ&A

  • sortコマンドについて

    33 333 22 33 333 33 33 333 11 33 222 11 33 111 11 44 111 11 44 222 11 11 111 11 11 222 11 上記のファイルを以下のようにソートしたいのですが どのようにすればよいでしょうか? 第一ソートキー 1~2番目の昇順 第二ソートキー 4~6番目の降順 第三ソートキー 8~9番目の昇順 (ちなみにspaceはたまたまspaceで区切り文字ではありません) 11 222 11 11 111 11 33 333 11 33 333 22 33 333 33 33 222 11 33 111 11 44 222 11 44 111 11 以下の試して見ましたがうまくいきませんでした。 sort -k 1.1,1.2 -r -k 1.4,1.6 -k 1.8,1.9 test.txt 宜しくお願い致します。

  • Sortコマンド以外で行をソートする方法

    Sortコマンドを使ってテキストファイル内の行をソートしていたのですが、扱うテキストファイルの内容によってエラーが出てしまい、エラーメッセージをWEBで検索して書かれていた対策をしたのですがうまく行きませんでした。 ですので、Sort以外のコマンドで、テキストファイル内の行を昇順と降順でソートしたいと考えているのですが、何か方法はないでしょうか。 Windowsのコマンドプロンプトで使用出来るものであれば、AWKでもPerlでもその他のコマンドでも構いませんし、スクリプトファイルを読み込めるコマンドでしたらスクリプトでの書き方でも結構ですので、ご存知の方がおられましたら教えて頂けないでしょうか。

  • sortコマンドについて

    Unixのソートコマンドを用いて複数ソートキーを指定し、 ソートキーに応じて昇順降順を指定することはできるでしょうか? 宜しくお願い致します。 第一ソートキー 昇順 第二ソートキー 降順 第三ソートキー 昇順 以下を試して見ましたがうまくいきませんでした。 sort -k 1.1,1.2 -r -k 1.4,1.6 -k 1.8,1.9 test.txt

  • VBA ファイルを読み込む際のSortメソッドの使い方

    tabで区切られたテキストファイルを読み込み、日時の列を昇順で並び替える処理をしようとしました。 sortメソッドを使って並び変えようとしましたが、上手くいきません。。 既に開いているエクセル上では簡単なsortメソッドを使って並び替えはできました。↓のようなマクロ記録を使って。 Range("A1:A11").Select Range("A1:C11").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin,DataOption1:=xlSortNormal ファイルを読み込んで、sortメソッドを使うには何か特別な方法があるのでしょうか?どなたか教えて下さい。よろしくお願いします。

  • sortコマンドの使い方

    一列目はクラス、二列目はテストの点数、三列目は氏名からなるデータ: # data.txt ---------- 1 80 安倍 1 100 小泉 1 90 小沢 2 80 松坂 2 70 松井 2 100 鈴木 ------------- があります。 これを sortコマンドで (1) 1列目昇順 (2) 2列目降順 で並び替えて # data2.txt ---------- 1 100 小泉 1 90 小沢 1 80 安倍 2 100 鈴木 2 80 松坂 2 70 松井 ------------- のように、クラスごとに得点順に並び替えたいと思っています。 sort のオプションは -k が並び替えの基準の列の指定 -r が逆順 -g が数値データ なので cat data | sort -grk2 | sort -k1 としてみましたがうまく行きません。 一つめ「sort -r -k2」でせっかく二列目降順に並び替えているのに、二つめ(右)の sort -k1 でその結果が無くなってしまって 1 100 小泉 1 80 安倍 ← !! 1 90 小沢 ← !! 2 100 鈴木 2 70 松井 ← !! 2 80 松坂 ← !! のようになってしまいます。 どうすればよいでしょうか?

  • 数字を認識するsortコマンドはありますか?

    Windows XP/7のファイルマネージャーを見ていると、桁数に関係なく数字がソートされています。 (昔は桁数をそろえてゼロ詰めしていたものでしたが) これと同じことができるsortコマンドはないでしょうか? ファイル1 ファイル2  : ファイル10 ファイル11 というような内容のテキストファイルをソートして、数字順に出力してほしいのです。 現状では ファイル1 ファイル10 ファイル11 ファイル2  : となってしまいます。

  • 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ディレクトリのファイルシステムの拡張を求めたところ「できない」と言われてしまいました。 開発の最終段階でのボリュームテストを行ったときの障害でしたので、 処理を大幅に変更するような対処は出来ない状況です。 代替方法などありましたらご教示頂きたいと思います。 以上、宜しくお願い致します。

  • C言語のCSV形式からのソート

    C言語初心者です。 C言語でCSV形式のテキストファイルを読み込み そのファイルの内容(数値)を昇順にソートして表示するプログラムを作りたいのですが中々上手く行きません・・・。 調べても分からず困っています。 どなたか教えていただけませんか?

  • 数字のソート

    早速です。 以下のように頭に連番、 次の4項目が00~99までの数字の レコードがあります。 これを連番は崩さず、 4個の数字を昇順に並べたいのですが。 どのようにソート(コード)すれば宜しいでしょうか。 1<>8<>13<>27<>30<> 2<>20<>9<>1<>16<> 3<>5<>31<>36<>38<> 4<>52<>79<>18<>27<> 5<>23<>15<>9<>28<> 6<>38<>6<>45<>25<> ↓ 1<>8<>13<>27<>30<> 2<>1<>9<>16<>20<> 3<>5<>31<>36<>38<> 4<>18<>27<>52<>79<> 5<>9<>15<>23<>28<> 6<>6<>25<>38<>45<> 宜しくお願いします。

    • ベストアンサー
    • Perl
  • ソートについて

    同様の回答があったら申し訳ありません。 現在CGIにてリストを作成しています。現状、書いた順番によってリストが作成されていますが、書き込まれたファイルのある1フィールドで昇順にソートさせたいのですが、うまくいきません。 ファイルレイアウト(例)↓ ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17) 上記のようなレイアウトのファイルで、「$9」>「$10」(?)の条件(第一条件が$9、第二条件が$10です)でソートさせる場合、どの様なコマンドを書けば良いのでしょうか?

    • ベストアンサー
    • CGI