キーフィールドの操作にNを指定して、英字と数字の連結データを並べ換える場合、以下の注意が必要です。
キーフィールドの指定例1
キーフィールドの操作にNを指定して英字と数字の連結データを並べ換える場合、数字部分の並びは数値の大小だけを比較します。
したがって、以下のようなデータでは出力される順序が特定できません。
0.9ascaN
入力データ | 出力結果のケース1 | 出力結果のケース2 |
---|---|---|
data001 | data001 | data00001 |
data2 | data00001 | data1 |
data1 | data1 | data001 |
data00001 | data2 | data2 |
ポイント
数字部分の「1」、「001」、および「00001」は、どれも「1」という値のため、「data1」、「data001」、および「data00001」は全て同一のキーと判断されます。先入力先出力(FIFO)機能(環境変数BSORT_FIFO、スタートアップファイルのBSORT_FIFO、bsortexコマンドにおける実行環境オプション(-option)のfifoオペランド、またはbsortコマンドにおける先入力先出力(FIFO)機能オプション(-f))を指定している場合は入力順を保って出力されますが、先入力先出力(FIFO)機能の指定がない場合は、上記の出力結果のケース1、ケース2にあるように出力順は不定となります。
キーフィールドの指定例2
キーフィールドの指定例1に対して、数字部分の桁数も考慮して並べ換えたい場合は、以下のように指定します。
0.9ascaN,0.9ascr
入力データ | 出力結果 |
---|---|
data001 | data1 |
data2 | data001 |
data1 | data00001 |
data00001 | data2 |
ポイント
以下の順で出力順が決まります。
第1キー(0.9ascaN)の比較により、「data001」、「data1」、および「data00001」と「data2」の順序が決まります。第1キーの比較によって大小関係が確定した「data2」については、以降の第2キーによる比較は行われません。
「data001」、「data1」、および「data00001」は、キーの値が等しいため、第2キー(0.9ascr)で比較します。
第2キーは文字列として比較し、大きい順に並べます。この例では、「data」の次の文字で最初の大小関係が決まります。したがって、「data1」が「data001」、および「data00001」よりも大きい値となり、最初に出力されます。同様に「data001」と「data00001」では「data001」の「1」の部分が「data00001」では「0」なので、「data001」が大きい値と判断され、2番目に出力されます。残った「data00001」と既に順序が決定した「data2」が順に出力され、上記の出力結果が得られます。