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

このQ&Aのポイント
  • テキストファイル内の行をソートする方法を知りたい
  • Sortコマンドを使っているがエラーが出てしまい、他の方法を試したい
  • Windowsのコマンドプロンプトで使用可能な方法を教えてほしい
回答を見る
  • ベストアンサー

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

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

  • kon77
  • お礼率97% (92/94)

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

Perl だったらそれこそ print sort <>;

kon77
質問者

お礼

ご回答ありがとうございます。 お教え頂いた方法を試しましたところ、見事にソート出来ました。 ありがとうございました。Perlだとこんなに簡単に出来るのですね。 逆順のソートも、Perl関連のWEBページを見て今試しているのですが、改行が一箇所削除されてしまう現象が起きまして、それはどうにか自分で調べて解決しようと思います。 大変参考になりました。 ご回答、本当にありがとうございました。

kon77
質問者

補足

以下の書き方で、無事に目的の動作が出来ました。 ありがとうございました。大変助かりました。 【昇順でソート} perl -e "print sort <>;" in.txt > out.txt 【降順でソート} perl -e "print reverse sort <>;" in.txt > out.txt

その他の回答 (1)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

>扱うテキストファイルの内容によってエラーが出てしまい、エラーメッセージをWEBで検索して書かれていた対策をしたのですがうまく行きませんでした。  何が問題で、どんな対策をして、どのようにうまく行かなかったのかはあなたしか知らない。その情報を示されないと、回答しようがないです。  詳しい情報を・・  AWKにしろ、Perlにしろスクリプトを書いて実行させれば良いはずですし、SEDなどを使う方法もあるでしょう。

kon77
質問者

お礼

ご回答、ありがとうございます。 エラーメッセージをメモしたファイルがあったのですが、Sortコマンドは諦めるつもりだったので削除してしまいました。 ですので、正確なエラーメッセージはわかりませんが、覚えている限り、LC_ALL='C' を付けろといった内容だったと思います。 ですので、取った対策としましては、バッチファイル中に「set LC_ALL=C」を指定して再試行しました。他にもいくつか環境変数を試したと思いますが、どれをやっても駄目だったので諦めました。 バッチファイルで行っている動作は、複数の動的なWEBページをダウンロードして、一つのファイルに結合し、そこから必要な行だけを取り出し、その後Sortコマンドでソートするといった内容です。ですので、扱うファイルの内容は毎回異なります。 やはり、AWKやPealやSEDでも、書き方次第で同様の動作は出来るのですね。工夫してやってみようと思います。 ご回答、本当にありがとうございました。

関連するQ&A

  • sortコマンドについて

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

  • 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 宜しくお願い致します。

  • excel:一番上の行がソートできない

    winxp pro sp2, office2003, Q: A列で昇順ソートすると、下記の様に、一番上の行がソートできません。但し、A列で降順ソートすると、きれいにソートできます。 対策を教えてください。お願いします。 A   B 4  武井工業 1  鉄人化計画 2  メディアS 3  SBIフューチャーズ

  • sortコマンドについて

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

  • 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 松坂 ← !! のようになってしまいます。 どうすればよいでしょうか?

  • treeコマンドでソートできませんか?

     コマンドプロンプトのtreeコマンドで、ディレクトリ名順、ファイル順にソートして出力することはできますか?  “| sort”を使ってみましたが、どうもうまくできませんでしたので。よろしくお願いします。

  • perlをコマンドラインで実行したい

    今はperlをコマンドプロンプト上でファイルをコンパイルして実行結果を別のテキストファイルに出力しています。(printなど) ただ、こまごまとした置換え・変換などいちいちテキストファイルにperlを書いてコンパイルして出力ファイルを開いて取り出すというやり方にわずらわしさを感じてきました。 簡単なスクリプトであれば、使い捨ての方がよく感じており、 コマンドプロンプトで試してみたのですが、長い文章やソースなどを変数にいれることができず、(改行がEnterにとられてしまう??)また、一行にずらずらとかかなくてはならないので、うまくいきません。 なにか、テキストエディタのような感じで、このようなperlスクリプトをコンパイルできるようなものはあるのでしょうか。 copalというものを使ってみたのですが、 ファイルハンドルなどが使えなかったのでだめでした。 どなたかご協力お願いします。

    • ベストアンサー
    • Perl
  • 行単位で並び替えて、重複行を削除したい

    WindowsXPです。 テキストファイル、A.TXTがあり、10000行くらいなのですが、 行単位で並べ替えて、重複している同じものがあれば、これを1行にまとめたいのです。 並べ替えだけならば、MSDOSで、 sort A.TXT > outfile.TXT でいけそうですが、重複行をまとめることは出来そうにありません。 バッチファイルで処理をしたいのでMSDOSで捜しているのですが方法はないのでしょうか。 MSDOSに限らないとすれば、何か簡単にできる方法はありますか。 何かスクリプトみたいな感じで出来るといろいろと応用が出来ていいのですが。 関連して、WindowsXPでも、PERLが使えると聞きました。 WEBで捜しましたが、どうもどれがいいのか、また、インストール方法もよくわかりません。 フリーで使える、Windows上のPERL、あるいは、MSDOS以上に使い勝手のよいスクリプトがあれば、教えてください。

  • UNIXのソートコマンドについて

    はじめまして、UNIXのsortコマンドについて質問です。 CSVファイルをソートする際、1行目がタイトル行で2行目以降をソートしたいのですがよい方法をご存知ですか? OSはSunOSでバージョンは3.8くらいだったと思います。 よろしくお願いします。

  • sort の1行の文字長の制限

    1行に含まれるデータが大きい(約24K)ファイルのソートを sort コマンドを用いて行おうとしていますが、「入力ファイルで20480 個以上の文字を含んでいる行があります」というエラーが出てソートができません。 この制限を拡張する方法をご存知の方、ご教授下さい。 環境は、HP-UX B.11.23 IA64 です。