キーフィールドを指定します。
1つのキーフィールドは、位置、長さ、データ形式、および操作で構成されます。
複数のキーフィールドを指定した場合、指定した順に比較が行われます。複数のキーフィールドを指定する場合は、キーフィールドをコンマ( , )で区切って指定します(-key-def,key-def)。また、1つ前のキーフィールドの指定に続けて指定(-key-def key-def)することや、キーフィールドオプションを複数指定することもできます(-key-def -key-def)。
キーフィールドの指定を省略した場合、レコード全体をキーフィールドとみなしてコードの昇順に並べます。キーフィールドを省略して降順に並べる場合は、降順オプション(-r)を使用します。
注意
テキストファイルCSV形式、テキストファイルTSV形式の場合、キーフィールドは省略できません。
記述形式
-key-def [ ,key-def ...]
key-def の記述形式
pos.len typ [ opt ]
pos
キーフィールドの位置を指定します。
バイナリファイルとテキストファイル固定フィールド指定の場合は、レコードの先頭を0としたバイト位置を指定します。テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合は、0から数えたフィールド番号を指定します。
len
キーフィールドの長さをバイト数で指定します。
テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合、指定したフィールド長よりも長いフィールドが現れた場合は、指定したフィールド長で処理します。指定したフィールド長よりも短いフィールドが現れた場合は、実際のフィールド長で処理します。
typ に符号なし2進数を指定する場合は、1バイト分のビットを選択するためのマスク値を10進数でlen に指定します。この場合、pos の位置にある1バイトのフィールド値とマスク値の論理積がキー値になります。
指定可能な各データ形式の長さについては、2.6.4.1 キーフィールドに指定可能なデータ形式を参照してください。
注意
テキストファイルCSV形式、およびテキストファイルTSV形式の場合、フィールドを囲むダブルクォーテーション( " )は、キーフィールドの長さに含みません。また、ダブルクォーテーション( " )で囲まれたフィールド内の2つ連続したダブルクォーテーション( "" )は、1つのダブルクォーテーション( " )として長さを計算します。
例) テキストファイルCSV形式における、キーフィールドと長さ
キーフィールド キーフィールドとして有効な文字 キーフィールドの長さ ABC ABC 3バイト "ABC" ABC 3バイト "A""B""C" A"B"C 5バイト "A,B,C" A,B,C 5バイト
typ
キーフィールドのデータ形式を指定します。
指定可能なデータ形式については、2.6.4.1 キーフィールドに指定可能なデータ形式を参照してください。
opt
キーフィールドの操作を指定します。
指定可能な操作を以下に示します。バイナリファイルの場合は、a、r、およびwが指定できます。テキストファイルの場合は、全てのキーフィールドの操作が指定できます。複数の操作を指定する場合は、続けて記述します。aとrを両方とも省略した場合は、aを指定したものとして動作します。
opt | 意味 |
---|---|
a | 昇順に並べます。 |
b | キーフィールドの先頭の空白とタブを無視します。 |
d | 空白と英数字だけを比較の対象とします。 |
i | 制御文字コードを無視します。 |
j | 英小文字を英大文字として比較します。 |
n | 符号を含んだ数字の文字列を算術的な値で比較します。 |
N | 英字と数字の連結データ(例えば「data123」など)を英字と数値に分けて評価し並べます。 |
r | 降順に並べます。 |
w | 複数バイトから成る文字が混在していても文字ごとに比較して並べます。 |
注意
キーフィールドのデータ形式に照合順序変更を指定した場合、キーフィールドの操作にa、またはr以外を指定することはできません。
キーフィールドのデータ形式に文字形式2桁年号を指定した場合、キーフィールドの操作にa、またはr以外を指定しても無視されます。
記述例
例
例1) 入力レコードの先頭から長さ10バイトのASCIIコードのフィールドを昇順に並べる場合は、次のように指定します。
-0.10asca
例2) 入力レコードの5バイト目から長さ8バイトの外部10進数のフィールドを降順に並べる場合は、次のように指定します。
-4.8zdlr
例3) テキストファイル固定フィールド指定の場合、入力レコードの10バイト目から長さ20バイトのASCIIコードのフィールドを昇順に並べる場合は、次のように指定します。なお、キーフィールドの先頭の空白とタブは無視し、英小文字を英大文字として比較します。
-9.20ascabj
参考
バイナリファイルの可変長レコード形式、またはテキストファイルの場合、キーフィールドが存在しないレコードが入力されたときは、キーフィールドが存在しない部分の値を0とみなして処理します。