• ベストアンサー

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% (4900/10358)
回答No.2

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

white-tiger
質問者

お礼

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

noname#96023
noname#96023
回答No.1

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

white-tiger
質問者

お礼

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

関連するQ&A