• 締切済み

ソート

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

  • シェルソートの順位性

     このカテゴリーのNo.137(#35189)の続きなのですが、シェルソートについてご存知の方お願いします。  上記の質問にて、ヒープソートは完全二分割木型で、同一の値であってもその順序は保証されない、ということがわかりました。  そこで、配列の内容をソートする処理をシェルソートで組んでみました。  やろうとしているのは、n1、n2 の2つの配列に値を入れ、n1 が同じ値だったら n2 の値を使ってソートする、という処理です。  しかし実際には、n3、n4と無制限に続く2次元配列なので各配列を個別にソートしなければならず、n2 を先にソートしてから n1 をソートする、という処理を入れています。  ところがこれだと、n1 のソート時に同一の値の順序が崩れると、せっかく行った n2 のソートが無駄になってしまいます。  シェルソートの場合、こういうことは起こるのでしょうか。  よろしくお願いします。 

  • シェルソートの計算量

    nから降順で並べたソートをシェルソートで並び替える場合、計算量はどうなるのかを求めるプログラム(C言語)を教えてください。

  • エクセルでのソート

    エクセル2000を使っています、ソートについて質問させていただきます。 例えば、 88J001・・・88J055 88N001・・・88N011 88A001・・・88A0088 8K001・・・88K020と有る名簿を(上から下に並んでいます)、 左から3文字目に有るアルファベットを最優先キーに、数字3桁を2番目に優先するキーにし、アルファベット順ではなく、K、N、J、A、Hと有るようにソートしたいのですが、どのような操作をすればよろしいでしょうか?

  • ソートで

    get().sort(function() { return Math.round(Math.random()) - 0.5; }) はどういう意味ですか? ソートを return Math.round(Math.random()) - 0.5; でするようですが、 ランダムな数字を出してどうやってソートされるのですか? ソートは文字でか数値ででないのですか? http://memopad.bitter.jp/w3c/jsref/jsref_sort.html では >フォルトで、要素をアルファベットの昇順にソートします。 しかし、数値が正しくソートされません(40が5の前に来ます)。 数値をソートするためには、数を比較する関数を追加しなければなりません。 となっています。 ランダムな数字でソートはできるのですか? 使う意味を教えて下さい。 それから、-0.5をしてるのはどういう意味でしょうか?

  • ヒープソートは2重ソートできない?

     ソートに関して詳しい方、相談にのっていただけたらと思います。  CGIを使ってヒープソートするロジックを組みました。  そのルーチンはただ単項データをソートするだけでなく、たとえば、配列変数 n1 と 配列変数 n2 にそれぞれデータが入っていたとき、n1 をソートすると、それに連動して n2 の中身も一緒にソートされます。  言うならば、バラバラに並んだビデオテープを番号順に並べ替えると、一緒にタイトルも並べ変わる感じです。  ところが、配列 n1 をソートしていてたまに同じ数字が入っていることがあります。そういうときは n2 の順にしたいのです。  そこで、先に n2 をソートしてから n1 をソートするといいのではと考え、そのようにプログラムを組んでみました。  ところが実際には、n1 をソートした瞬間に、せっかく並べ替えた n2 の内容がバラバラになってしまうのです。  「n1 の内容が同じ場合は n2 を昇順に並べる」という処理を記述していても、実際には n2 の内容はバラバラです。  これはヒープソートを使用している限り仕方のないことなのでしょうか。あるいは何らかの解決方法を知っている方、よろしくお願いします。

  • sortコマンドについて

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

  • powershellでのソート

    powershellでのソート処理に関して教えてください。 list.csv F1,F2,F3 file01.txt,c:\dirA,100kb file20.txt,c:\dirC,100kb file100.txt,c:\dirG,100kb file200.txt,c:\dirG,100kb CSVで上記の様なデータがあり、F1のデータにおいて、 ファイル名の数字部分でソートしたいのですが、 意図したソートができません。 数字を考慮してのソートってどうやればよいでしょうか。 PS c:\>Get-Content .\list.csv|ConvertFrom-CSV |Sort-Object f1 F1 F2 F3 -- -- -- file01.txt c:\dirA 100kb file100.txt c:\dirG 100kb file20.txt c:\dirC 100kb file200.txt c:\dirG 100kb file01.txt→file02.txt→file100.txt→file200.txtの並びでソートさせたいです。 よろしくお願いします。

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

  • どのようにソートすればいいのか教えて下さい

    AとBとCにそれぞれ数値を与えておいて、その数値の大きい順にABCを並べ替えるようにしたいのです。一応、下のようにアルファベットと数値の間にはカンマを入れて分けています。 A, 5-------→B, 9 B, 9-------→C, 7 C, 7-------→A, 5 このように並べ替えたいのですが、うまくいきません。ArrayListを使用しCollectionsクラスのsortメソッドを使ってやれば先頭の文字によるソートはできるのですが、カンマ後の数値での並べ替えの方法がよくわかりません。 いい法方がありましたらおしえてください。

    • ベストアンサー
    • Java
  • 数字を認識するsortコマンドはありますか?

    Windows XP/7のファイルマネージャーを見ていると、桁数に関係なく数字がソートされています。 (昔は桁数をそろえてゼロ詰めしていたものでしたが) これと同じことができるsortコマンドはないでしょうか? ファイル1 ファイル2  : ファイル10 ファイル11 というような内容のテキストファイルをソートして、数字順に出力してほしいのです。 現状では ファイル1 ファイル10 ファイル11 ファイル2  : となってしまいます。

専門家に質問してみよう