• ベストアンサー

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

  • totmon
  • お礼率66% (213/319)

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

>(ちなみにspaceはたまたまspaceで区切り文字ではありません) とのことですが,既定で空白が区切り文字と解釈され,3つのフィールドに分割されているんじゃないでしょうか。 sort -k 1,1 -k 2r,2 -k 3,3 test.txt sort -t -k 1,1 -k 2r,2 -k 3,3 test.txt なんてのを試してみるとどうでしょう。 (…って,手元にUNIXがないので下記URLのページを読んだだけで推測で回答してるんですけど。一般人の参考意見ということで許してください) >並べ換えの順番を逆にしたいときは、-r オプション > (数字の並べ換えがうまくいかないときは、-g オプションを指定) >sort -t: -k 4g,4 -k 3gr,3 /etc/passwd >これは、passwdファイルを、グループIDで並べ換え、かつグループ内をuseridで逆順に並べ換えます。

参考URL:
http://www-06.ibm.com/jp/developerworks/linux/030516/j_l-tiptex4.html
totmon
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

-tで指定する区切り文字を工夫する必要があると思いますが、とりあえず sort -t " " -k 1.1,1.2 -k 1.4,1.6r -k 1.8,1.9 test.txt (""の中身は本物のタブ) で 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 が得られました。

totmon
質問者

お礼

ありがとうございました。

  • tatsumi01
  • ベストアンサー率30% (976/3185)
回答No.1

Unix 忘れてしまいましたが、パイプを使ったらどうでしょうか。 sort -k 1.1,1.2 test.txt | sort -r -k 1.4,1.6 | sort -k 1.8,1.9 sort のキーの数値 (1.1 など) がこれでよいかは知りません。

totmon
質問者

お礼

これだと、 sort -k 1.8,1.9が第一キーでソートされたのみとなります。 宜しくお願いいたします。

関連するQ&A

  • sortコマンドについて

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

  • 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コマンドについて

    ファイルaaaについて、 第1ソートキーを第1列目で数値順に 第2ソートキーを第2列目でアルファベット順に ソートした結果をbbbに出力したいと思います。 sort -n -k 1,1 -d -k 2,2 aaa > bbb としたところ、正しい結果が得られませんでした。 どのようにしたら良いのか教えて下さい。

  • sortコマンドについて

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

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

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

  • bash forコマンドでソート

    bash forコマンドでソート CentOS8 bashの forコマンドで、ディレクトリ内のファイル名を部分指定した降順でソートした状態で順次読み込みしたいです。 <ファイル> aaa.dat bbbb_0001.dat TEST_0001.file TEST_0002.file TEST_0003.file <アウトプット> TEST_0003.file TEST_0002.file TEST_0001.file 基本的な読込と、lsコマンドの結果を基に読み込む方法はわかりましたが、これに降順ソートを加えるにはどうすれば良いでしょうか? <基本的な読込> for file in /dir1/TEST_*.file do echo $file done <lsコマンドの結果を基に読込> for file in $(ls /dir1/TEST_*.file) do echo $file done

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

  • Pythonの2次元配列のソート

    Python3の2次元配列のソートについて教えて下さい [[1, 2], [1, 3], [2, 4]]のようなリストのソートで 昇順ソートでインデックス0が同じならインデックス1は降順でソートしたいと思ってます。 結果が以下のようになるようにしたいです 1 3 1 2 2 4 よろしくおねがいします。

  • 検索結果の再ソートを試みる。

    項番 商品番号 生産日 賞味期限 A B C D E 1 1 200407 200507 2 1 200307 200407 3 2 200404 200504 4 3 200406 200407 5 3 200405 200406 6 3 200404 200405 上記のテーブルがあったとして、以下の処理を実現するSQLを考えます。 1. 上記のものを、商品番号の昇順・生産日の降順(最新)でソートし、 商品番号毎に生産日が最新のものを抽出します (期待される結果:項番3、4、1の順で3つ抽出) 2. 取得したのを賞味期限の昇順にソートします ※項目は、項番商品番号生産日賞味期限の他にもABCDE……と存在するものとします。 カーソルオープン時に上記1、2を満たす事が条件です。 上記SQLの記述について、どなたか助言おねがいします。

  • ファイルを開く等のダイアログのソート順

    各アプリの「ファイルを開く」等を選択するとダイアログが現れ、ファイルの一覧を表示 しますが、このソート順はデフォルトでは「ファイル名」の昇順になっているかと思い ます。 最近何の操作をしたのかわかりませんが、更新日時の降順になってしまいました。 詳細で表示してファイル名昇順ソートした後にファイルを選択したりキャンセルしても 直りません。 不便なので、ファイル名昇順で表示されるように戻すことはできないでしょうか?