レコード集約機能を使用する場合に集約フィールドを指定します。
レコード集約機能は、指定したキーフィールドの値が同一のとき、集約フィールドの値を加算して1つのレコードにする機能です。レコード集約機能の対象となったレコードの中から、どのレコードが出力されるかは不定です。テキストファイルの場合は、ASCIIコード、Unicode UCS-2形式、Unicode UTF-32形式、またはUnicode UTF-8形式で記述された半角の数字だけを処理の対象とします。
レコード集約機能は、ソート機能、またはマージ機能のときに有効です。サプレス機能(サプレスオプション(-u))とは排他関係にあります。先入力先出力(FIFO)機能(先入力先出力(FIFO)機能オプション(-f)、スタートアップファイルのBSORT_FIFO、または環境変数BSORT_FIFO)と同時に指定された場合、先入力先出力(FIFO)機能の指定は無視されます。
複数の集約フィールドを指定した場合、それぞれの集約フィールド毎に値を加算します。
記述形式
-g sum-def [ ,sum-def ...]
sum-def の記述形式
pos.len typ [ opt ]
pos
集約フィールドの位置を指定します。
バイナリファイルとテキストファイル固定フィールド指定の場合は、レコードの先頭を0としたバイト位置を指定します。テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合は、0から数えたフィールド番号を指定します。
len
集約フィールドの長さをバイト数で指定します。
テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合、指定したフィールド長よりも長いフィールドが現れた場合は、指定したフィールド長で処理します。指定したフィールド長よりも短いフィールドが現れた場合は、指定したフィールド長に拡張して処理します。
各データ形式における指定可能な長さについては、1.6.4.2 集約フィールドに指定可能なデータ形式を参照してください。
注意
テキストファイルCSV形式、およびテキストファイルTSV形式の場合、フィールドを囲むダブルクォーテーション(")は、集約フィールドの長さに含みません。
例) テキストファイルCSV形式における、集約フィールドと長さ
集約フィールド 集約フィールドとして有効な文字 集約フィールドの長さ 123 123 3バイト "123" 123 3バイト
typ
集約フィールドのデータ形式を指定します。
指定可能なデータ形式については、1.6.4.2 集約フィールドに指定可能なデータ形式を参照してください。
opt
テキストファイルの場合に集約フィールドの出力形式を指定します。
バイナリファイルの場合に指定するとエラーとなります。指定可能な出力形式を以下に示します。
opt | 意味 |
---|---|
i | 集約フィールドの値に符号を付けます。 |
u | 集約フィールドの値が負の値の場合だけ「-」の符号を付けます。 |
z | 集約フィールドの値がフィールド長に満たない場合、左余白に「0」を詰めます。 |
b | 集約フィールドの値がフィールド長に満たない場合、左余白に空白を詰めます。 |
d | 集約フィールドの先頭から空白、タブ、および「0」を削除します。 |
注意
dは、テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合に指定可能です。テキストファイル固定フィールド指定の場合はエラーになります。
iを指定し、集約した値が「0」になった場合は「+」の符号を付けます。
bを指定し、符号が付く場合、符号は数字部の直前に付加されます。
i、およびuを省略した場合は、以下のように処理します。
集約結果が負の値の場合は、集約結果に「-」の符号を付けます。
符号なしデータと符号付きデータの集約結果が正の値の場合は、集約結果に符号を付けません。
符号なしデータ同士を集約した場合は、集約結果に符号を付けません。
符号なしデータと符号付きデータの集約結果が「0」の場合は、符号を付けません。
符号付きデータ同士を集約した場合は、集約結果に符号を付けます。集約した結果が「0」の場合は、「+」の符号を付けます。
集約フィールドの値に符号を付ける場合、集約フィールドの値が集約フィールド長を満たしており、符号が付けられないときはオーバフローとなります。
z、b、およびdを省略した場合は、以下のように処理します。
以下のような条件の集約フィールドを集約したとき、集約フィールド長に集約結果が満たない場合は、集約フィールドの左余白に「0」を詰めます。
左余白に「0」が詰められているデータ同士のとき
左余白に「0」が詰められているデータと左余白に空白が詰められているデータのとき
左余白に「0」が詰められているデータと左余白にタブが詰められているデータのとき
以下のような条件の集約フィールドを集約したとき、集約フィールド長に集約結果が満たない場合は、集約フィールドの左余白に空白を詰めます。
左余白に空白が詰められているデータ同士のとき
左余白にタブが詰められているデータ同士のとき
左余白に空白が詰められているデータと左余白にタブが詰められているデータのとき
レコード集約機能の対象とならなかったレコード(キーフィールドの値が同一である他のレコードが存在しないレコード)の集約フィールドは、以下のように処理します。
optの指定がある場合は、optで指定された形式で出力します。
optの指定がない場合は、入力されたままの形式で出力されます。
記述例
例
入力レコードの7バイト目から長さ8バイトの内部10進数のフィールドを集約フィールドに指定する場合は、以下のように指定します。
-g 6.8pdl
テキストファイルの場合、入力レコードの4バイト目から長さ8バイトのASCIIコードのフィールドを集約フィールドに指定するときは、以下のように指定します。なお、集約フィールドには符号をつけ、集約フィールドの値がフィールド長に満たないときには左余白に空白を詰めます。
-g 3.8ascib
注意
レコード集約機能の対象となったレコードの中から、どのレコードが出力されるかは不定です。
集約フィールドは、キーフィールド、および他の集約フィールドと重なることはできません。
集約フィールドは、レコード内に存在する必要があります。
レコード集約機能を使用する場合、キーフィールドは省略できません。
集約フィールドの集約処理中にオーバフローが生じた場合の動作は、スタートアップファイルのBSORT_SUMOVERCONTの指定に従います。
小数点を含む数字の集約はできません。
テキストファイルの場合は、ASCIIコード、Unicode UCS-2形式、Unicode UTF-32形式、またはUnicode UTF-8形式で記述された半角の数字だけを処理の対象とします。
テキストファイル浮動フィールド指定の場合、集約フィールドにフィールド分離文字が現れたことにより集約フィールドの位置が変わる場合は、正しく動作しません。
テキストファイル浮動フィールド指定の場合、指定したフィールド長よりも長いフィールドが現れたときは、指定したフィールド長を超える部分はレコード集約機能の対象とせず、そのまま出力されます。また、指定したフィールド長より短いフィールドが現れたときは、指定したフィールド長に拡張します。
例) 集約フィールドを「1.5asc」、キーフィールドを「0.3asca」と指定した場合(フィールド分離文字は「;」とします)
入力レコード 出力レコード 001;12345ABC;OPQ (注1) 001;12456ABC;OPQ (注2) 001;111;RST 002;00127;UVW (注3) 002;15;UVW (注1) 002;00112DEF;XYZ 注1) ここで示したレコードが、レコード集約機能の出力対象になったものとします。 注2) 指定したフィールド長を超える部分(「ABC」)は、そのまま出力されます。 注3) 指定したフィールド長より短い場合は、指定したフィールド長に拡張されます。
テキストファイルCSV形式、またはテキストファイルTSV形式の場合、指定したフィールド長よりも長いフィールドが現れたときは、指定したフィールド長を超える部分はレコード集約機能の対象とせず、出力もされません。また、指定したフィールド長より短いフィールドが現れたときは、指定したフィールド長に拡張します。
例) テキストファイルCSV形式で、集約フィールドを「1.5asc」、キーフィールドを「0.3asca」と指定した場合
入力レコード 出力レコード 001,12345ABC,OPQ (注1) 001,12468,OPQ (注2) 001,123,RST 002,00027,UVW (注3) 002,15,UVW (注1) 002,00012DEF,XYZ 注1) ここで示したレコードが、レコード集約機能の出力対象になったものとします。 注2) 指定したフィールド長を超える部分(「ABC」)は、出力されません。 注3) 指定したフィールド長より短い場合は、指定したフィールド長に拡張されます。
テキストファイルCSV形式、またはテキストファイルTSV形式の場合、集約フィールドをダブルクォーテーション(")で囲むかどうかは、出力対象となる入力レコードのフィールドに従います。出力対象となる入力レコードのフィールドがダブルクォーテーション(")で囲まれているときは、レコード集約後のフィールドもダブルクォーテーション(")で囲みます。
例) テキストファイルCSV形式で、集約フィールドを「1.5asc」、キーフィールドを「0.3asca」と指定した場合
入力レコード 出力レコード 001,"12345",OPQ (注) 001,"12468",OPQ 001,"123",RST 002,"00027",UVW 002,"15",UVW (注) 003,11900,GHI 002,00012,XYZ 004,98769,MNO 003,11111,GHI (注) 003,"00789",JKL 004,98765,MNO (注) 004,4,PQR 注) ここで示したレコードが、レコード集約機能の出力対象になったものとします。
テキストファイル浮動フィールド指定におけるレコード集約機能では、実際の集約フィールドの長さが集約フィールドとして指定された長さより短い場合、集約フィールドを指定された長さに拡張して出力します。集約フィールドの拡張により、レコード長が指定された最大レコード長を超えると、オーバフローが発生したものとして処理します。このため、テキストファイル浮動フィールド指定におけるレコード集約機能では、集約フィールドが集約フィールドとして指定された長さに拡張されることを考慮して、最大レコード長を指定してください。