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