• 締切済み

ソート

cygwinのCシェルで、ファイルの内容をソートしたいです。 数字だけだとsort -n でソートされるのですが、頭にアルファベットがある場合に ソートする方法はあるでしょうか? 下記のようになってしまうのですが、頭にアルファベットがあっても後ろの数字でソートしたいです。 L1 L10 L101 L102 L2 L20 L201 L3 L30 L301 L401

みんなの回答

noname#227025
noname#227025
回答No.4

> L1 aaaa xxx > L30 bbbb yyy > L2 cccc zzz > このように後に何かあった場合は出来ないのでしょうか? ですから、sed の使い方次第です。 例) sed 's/[^0-9]*/& /' test.txt | sort -k 2,2n | sed 's/ //' L1 aaaa xxx L2 cccc zzz L30 bbbb yyy

noname#227025
noname#227025
回答No.3

No.2 です。 > 試してみましたが、-nをつけた時と同じ結果になりました。 そんなことないと思いますけど。 回答をコピー & ペーストして実行すると、少なくとも私の環境では以下のようにソートされます。 もしかして、コピー & ペーストせずに手入力して、タイプミスしているのではないでしょうか? sed 's/[0-9]*$/ &/' test.txt | sort -k 2,2n | sed 's/ //' L1 L2 L3 L10 L20 L30 L101 L102 L201 L301 L401

satomi002
質問者

お礼

すみません、元ファイルのほうで数字の後にスペースがあったのが原因でした。 数字の後のスペースを無くすと出来ました。 ありがとうございます。 L1 aaaa xxx L30 bbbb yyy L2 cccc zzz このように後に何かあった場合は出来ないのでしょうか?

satomi002
質問者

補足

コピペしています。 もう一度コピペしましたが、出力結果は-nと同じになりました。

noname#227025
noname#227025
回答No.2

> 例としてあげましが、実際はアルファベットはL以外にも多数あり、 > 1文字だけでなく2,3文字の場合もあります。 そのような場合でも、sed の使い方次第で対応可能ですよ。 例) sed 's/[0-9]*$/ &/' test.txt | sort -k 2,2n | sed 's/ //'

satomi002
質問者

補足

ありがとうございます。 試してみましたが、-nをつけた時と同じ結果になりました。

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

一般的には「あらかじめ sed などで空白を入れてからソート」でしょうか.

satomi002
質問者

補足

ありがとうございます。 例としてあげましが、実際はアルファベットはL以外にも多数あり、 1文字だけでなく2,3文字の場合もあります。

関連するQ&A