• ベストアンサー

月名でソートを行いたいのですが・・・

Solaris8上で、ソートコマンド『sort -M 入力ファイル名』をやったのですが、上手く月名でソートを行ってくれません。入力ファイルは、月名のみのレコードが書かれたテキストファイルです。以下に、私が入力した月名を示します。 JAN、FEB、MAR、APR、MAY、JUN、 JUL、AUG、SEP、OCT、NOV、DEC もう一点、同一レコードを削除する『-u』オプションも上手く動きません。 どなたかご存知でしたら教えて頂けませんか? 宜しくお願い致します。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

> 『-u』については > 開始フィールド(+No)の値が重複すると削除されてしまうのですね。 > レコード全て同一でないと削除しないと思っていました。 man sort の -u のところを見れば書いてありますが、ソートキーが同一の行を削除します。 +pos1 や -k によるソートキーの指定をしなければ、行全体がソートキーになります。 なので、sort を二回組み合わせれば、同一行を削除し、かつ、一部のフィールドだけを キーにして並べ替えできます。例えば、 % sort -u 入力ファイル | sort -k 2,2 -M とか。

super-saiyajin
質問者

お礼

a-kuma様 すみません。私の調査不足でした。 パイプを使うと上手くいくんですね。 たびたびありがとうございました。

その他の回答 (2)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

No.1 の回答にあるように locale の問題でしょう。月名を英語で書くならば、一時的に LANG を変えるのが良いですね。 % env LANG=C sort -M 入力ファイル -u についても、-M とあわせて使っており、それでうまく動かない、ということであれば、 問題の根は一緒です。

super-saiyajin
質問者

お礼

a-kuma様 一時的にLANGを変更するやり方、とても参考になりました。 月名での並べ替えは成功しましたが、『-u』については 開始フィールド(+No)の値が重複すると削除されてしまうのですね。 レコード全て同一でないと削除しないと思っていました。 ご回答ありがとうございました。

  • 3rd
  • ベストアンサー率30% (7/23)
回答No.1

Solaris の sort コマンドの並べ替えオプションは、 -M に限らず LC_COLLATE の値に依存します。 よって、JAN 等の文字列を正しく月の名前としてソートさせるには、 環境変数 LANG を C にするのが一番手っ取りばやいでしょう。 LANG の値が、Japanese 等の場合は、思ったように ソートされないことになります。 -u オプションについては、動作しない理由について 見当がつきません。

super-saiyajin
質問者

お礼

3rd様 LANGをCに設定し、再度試してみたところ、無事に並べ替えが成功しました。 ありがとうございました。

関連するQ&A