• ベストアンサー

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

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

  • ベストアンサー
noname#66514
noname#66514
回答No.3

フィールド1を数値昇順にsortし、 さらにフィールド2を数値降順にsortする、 という具合に、man sort の説明通りでいいのでは? cat data.txt | sort -k 1n -k 2nr > cat data | sort -grk2 | sort -k1 は記述がおかしいです。(man sort の説明に沿っていない)

white-tiger
質問者

お礼

完璧です。 ありがとうございます。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.2

cat data | sort +0n -1 +1nr -2

white-tiger
質問者

お礼

うまく行きました。ちょっとむつかしいですね。。

noname#96023
noname#96023
回答No.1

確認はしてませんが、 sort -grk2,1 でしょうかね

white-tiger
質問者

お礼

うまく行きませんでした・・・

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

  • ソート

    読み込むファイル(sample.txt)は、 2,jirou 5,gorou 4,shirou 1,tarou 6,mutsuo 3,saburou 下記の処理をします。 #include<stdio.h> #include<string.h> #define N 6 int sort1[N]; char sort2[N][30]; int BubbleSort(int data[N]) { int i,j,flag; do{ flag=0; for(i=0;i<N-1;i++) { if(data[i]>data[i+1]) { flag=1; j=data[i]; data[i]=data[i+1]; data[i+1]=j; } } } while(flag==1); return 0; } int main(void) { FILE *fpin; int id,h,k; printf("\n"); fpin=fopen("sample.txt","r"); if(fpin==NULL){ printf("ファイルをオープンできず!\n"); return 1; } for(k=0;k<N;k++) { h=fscanf(fpin,"%d,%s",&sort1[k],sort2[k]); if(h==EOF) break; printf("%d %s\n",sort1[k],sort2[k]); } printf("\n"); BubbleSort(sort1); for(k=0;k<N;k++) printf("%d %s\n",sort1[k],sort2[k]); return 0; } 実行結果は、 2 jirou 5 gorou 4 shirou 1 tarou 6 mutsuo 3 saburou 1 jirou 2 gorou 3 shirou 4 tarou 5 mutsuo 6 saburou 名前(sort2)もソートさせるには、どうすればいいか手ほどきをお願いします…

  • 配列のソートがしたい

    sort関数等調べたのですがうまくできません。 やりたいことは http://q.hatena.ne.jp/1155090363 ↑で見つけた事とそっくりなのですが・・・。 ------------------------------------------- arrItem[n] という配列の一つの要素の中に、 タブで区切られた10個程のデータが入っています。 arrItem[0] = "5 ^ 店名5 ^ 品名5 ^ 価格5 ^ 割引額5 ^・・・^ 備考5" arrItem[1] = "2 ^ 店名2 ^ 品名2 ^ 価格2 ^ 割引額2 ^・・・^ 備考2" arrItem[2] = "11 ^ 店名9 ^ 品名9 ^ 価格9 ^ 割引額9 ^・・・^ 備考9" 一列目はSEQ番号でユニークですが、順番が並んでいません。 この配列をSEQ番号で並べ替えたいのですが、 sortだと文字列比較のためか桁数の違う数字の並べ替えが 上手くできません。数値としてのソート方法 が分かる方いらっしゃいましたらご教授願います。 もし可能なら、1列目を数値降順にしたり昇順にしたり、 また2列目を五十音順にソートしたり、 また4列目を価格の安い順にソートしたり と応用も可能ならばご教授願いたいです。 宜しくお願い致します。

  • エクセル2010のソートには限界がある?

    よろしくお願いします。 エクセル2010を使っていますがエクセルのソートがうまくできません。 100行のデータがあったとして、オートフィルタ⇒昇順または降順 という形でソートしても、50行ぐらいまではソートされているのですが、 それ以降はソートされていなかったりすることがあります。 たとえば 1-1 田中   男性  車所有 1-2 佐藤   女性  土地所有 1-3 角川   男性  車所有 2-1 講談   男性  土地所有 2-2 集英社  女性  車所有 子rを1-1,1-2などの番号でソートしても昇順、降順にならかったり、 男性と女性でデータを分けたいため、キーワードを含む、などで”男性” を入力しても、女性が入力されている行が表示されたりします。 エクセルのソートには制限があるのでしょうか? 上記のような表で男性だけのデータ、女性だけのデータがほしければ、 男性だけのデータを表示して女性のデータが入っているかどうか目検で確認し Alt+; で可視セルだけコピーするしかないでしょうか? 以前のエクセルだときちんとソートできた気がします。。。。 ある表からデータを抽出し、可視セルだけきちんと取り出す方法を 教えてください。

  • Excel2007 ソートの仕方

    いつもお世話になります。 Excel2007を現在利用していますが、列に入れた数値データーを降順or昇順に並べかえるのにフィルターを使って逆三角マークが表示されていますが、これでやると項目のあるすべての列に逆三角マークがついてしまいます。 これを任意の部分に逆三角マークをつけて降順昇順のソートを三角マークをクリックする都度に並べ変えるようにできませんでしょうか? お手数おかけしますが、宜しくお願いいたします。

  • エクスプローラのソートについて

    WinXpのエクスプローラを開くと、右側に「名前」「サイズ」「種類」「更新日時」が表示されます。 「名前」の順番を降順にしようと、「名前ボタン」?(エクスプローラの上)を押し、 ”▽”が表示されるのですが、降順になっていないファイルがあります。 (「名前ボタン」を2回押し、”△”にしても同様) なぜなのでしょうか? 他のパソコンでは正常に動作します。 ちなみに、機種は IBM ThinkPad X30です。 DOSを起動してテキストに出力するとソートされています。 例) =DIR D:\ > C:\サンプル.txt (Dドライブ直下のデータをCドライブ直下にサンプル.txtファイル名で作成) どなたか教えてください。

  • csv元データーの数字の列が、""で囲まれているせいか、数値としてのソートできません

    次の式でソートしたいのですが、 @LINES = sort { (split(/\,/,$a))[0] <=> (split(/\,/,$b))[0] } @LINES; csv元データーの数字の列が、 "28000000","鈴木", のように""で囲まれているせいか、<=>で数値としてのソートできません。 cmpで文字列としてのソートは出来ます。 どうしたら良いのでしょうか?

    • ベストアンサー
    • Perl
  • アクセスのデータ画面のソートについて

    いつもお世話になっています。 アクセスのデータ画面、エクセルに何となく似ているのですが、 エクセルのように「A列で降順」のような並び替え、 または「オートフィルタ」のような抽出はできるのでしょうか? エクセルにエクスポートするには、データが多すぎてまた頻繁にデータが追加されるので都度エクスポートするのには時間がかかりすぎてしまいます。 また、クエリで上記のようなソートや抽出ができるのなら、 その方法を教えていただけますか? よろしくお願いします。

  • 多次元配列のソートについて

    名前とテストの点, クラスが格納されている 以下のような多次元配列があるとします。 $data[0][0] = 'yamada'; $data[0][1] = '20'; $data[0][2] = 'B'; $data[1][0] = 'katoh'; $data[1][1] = '45'; $data[1][2] = 'A'; $data[2][0] = 'honda'; $data[2][1] = '15'; $data[2][2] = 'E'; $data[3][0] = 'ooyama'; $data[3][1] = '100'; $data[3][2] = 'C'; 上記の配列を得点順にソートして表示したいのですが どのようにすればうまく(昇順、降順)で表示できるのでしょうか?

    • 締切済み
    • PHP