- - PR -
Solaris8 sort -n オプションの指定について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-07-30 16:50
OS:Solaris8
固定長のファイルを管理番号、金額でソートしようとしています。 金額については -n オプションを使用しているのですが、 -n オプションを指定するとソート結果に反映されません。 (管理番号にはソート結果に反映されます。 また、-n を指定しない場合は文字列としてソートされます。) 金額の書式が「符号+前ゼロつき数値」となっているのですが、 この書式の場合は -n オプションは有効にならないのでしょうか? 以下、実行内容になります。 ==ソート前データ内容== 0920000000320050505-000000010000 0920000000320050505-000000110000 0920000000320050505+000000011000 0920000000320050505+000000000000 0920000000320050501+000000012000 0920000000220050516+000000000000 0920000000220050517+000000000000 0920000000420050505+000000005000 0920000000420050505+000000013000 0920000000420050505+000000000000 (1〜11byteが管理番号、20byte以降が金額になります。) ==実行ソートコマンド== LANG=C sort -k 1.1,1.11 -k 1.20n <固定長ファイル名> ==ソート後データ内容== 0920000000220050516+000000000000 0920000000220050517+000000000000 0920000000320050505-000000110000 0920000000320050505-000000010000 0920000000320050501+000000012000 0920000000320050505+000000000000 0920000000320050505+000000011000 0920000000420050505+000000000000 0920000000420050505+000000005000 0920000000420050505+000000013000 (管理番号ではソートされているが、金額では ソートされていない。) -n オプションの制限として 「先行するゼロおよびゼロに付けた正負符号は 順序付けに影響を与えません。 」というものがありますが この影響なのかな?と疑っているのですが・・・ どなたか解決のヒントをいただけないでしょうか? よろしくお願いいたします。 [ メッセージ編集済み 編集者: kio 編集日時 2005-07-30 16:52 ] | ||||
|
投稿日時: 2005-08-01 16:56
こんにちは。もう解決されていればよろしいのですが。
良く見ると、ちゃんと正しくソートされているようですよ。 一度ご確認あれ。 | ||||
|
投稿日時: 2005-08-01 18:56
ご返答いただきありがとうございます。
ソート結果について、管理番号「09200000003」のレコードは 0920000000320050505-000000110000 0920000000320050505-000000010000 0920000000320050501+000000012000 <- 0920000000320050505+000000000000 <- 0920000000320050505+000000011000 <- ではなく 0920000000320050505-000000110000 0920000000320050505-000000010000 0920000000320050505+000000000000 <- 0920000000320050505+000000011000 <- 0920000000320050501+000000012000 <- となることを想定していました。 ソートコマンドに対して、この結果はあっていないと 思うのですが・・・ [ メッセージ編集済み 編集者: kio 編集日時 2005-08-01 18:57 ] | ||||
|
投稿日時: 2005-08-01 20:04
おっと…。大変失礼しました。
先頭11文字が管理番号でしたね。確認不足でした。 手元にSolarisが無い為、POSIX準拠のはずのcygwinで試してみたのですが、どうも上手くいかないようです。やはり“+”があると、数値ソートに対応できない様子。 ※Linuxなら g オプションが使えるようですが… 回避策になりますが、“+”を空白に変えると、手元では上手くソートされました。 今回のようなファイルのフォーマットであれば、使えるのではないかと思います。 コマンドとしては、 $ sed -e 's/+/ /' ファイル名 | sort -k 1.1,1.11 -k 1.20n | sed -e 's/ /+/' 以上、ご参考まで。 |
1