ページの先頭行へ戻る
PowerSORT V7.0 ユーザーズガイド
FUJITSU Software

3.2.6 集約フィールドオプション(-g)

レコード集約機能を使用する場合に集約フィールドを指定します。
レコード集約機能は、指定したキーフィールドの値が同一のとき、集約フィールドの値を加算して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とは排他関係にあります。

u

集約フィールドの値が負の値の場合だけ「-」の符号を付けます。
iとは排他関係にあります。

z

集約フィールドの値がフィールド長に満たない場合、左余白に「0」を詰めます。
例えば、集約フィールドの値が「1234」という4桁の数字であり、集約フィールド長が6バイトの場合、「001234」という数字にします。b、dとは排他関係にあります。

b

集約フィールドの値がフィールド長に満たない場合、左余白に空白を詰めます。
例えば、集約フィールドの値が「1234」という4桁の数字であり、集約フィールド長が6バイトの場合、「□□1234」(□は半角空白を表わす)という数字にします。z、dとは排他関係にあります。

d

集約フィールドの先頭から空白、タブ、および「0」を削除します。
集約フィールドの先頭に空白、タブ、および「0」がある場合、左から評価し、「0」以外の数字が出現するまでの空白、タブ、および「0」を削除します。例えば、「00123」の場合、「123」という数字にします。ただし、集約フィールドの値が「0」(「0」、「0000」、「+000」など)の場合、最後の「0」は削除されません。z、bとは排他関係にあります。

注意

  • dは、テキストファイル浮動フィールド指定、テキストファイルCSV形式、およびテキストファイルTSV形式の場合に指定可能です。テキストファイル固定フィールド指定の場合はエラーになります。

  • iを指定し、集約した値が「0」になった場合は「+」の符号を付けます。

  • bを指定し、符号が付く場合、符号は数字部の直前に付加されます。

  • i、およびuを省略した場合は、以下のように処理します。

    • 集約結果が負の値の場合は、集約結果に「-」の符号を付けます。

    • 符号なしデータと符号付きデータの集約結果が正の値の場合は、集約結果に符号を付けません。

    • 符号なしデータ同士を集約した場合は、集約結果に符号を付けません。

    • 符号なしデータと符号付きデータの集約結果が「0」の場合は、符号を付けません。

    • 符号付きデータ同士を集約した場合は、集約結果に符号を付けます。集約した結果が「0」の場合は、「+」の符号を付けます。

  • 集約フィールドの値に符号を付ける場合、集約フィールドの値が集約フィールド長を満たしており、符号が付けられないときはオーバフローとなります。

  • z、b、およびdを省略した場合は、以下のように処理します。

    • 以下のような条件の集約フィールドを集約したとき、集約フィールド長に集約結果が満たない場合は、集約フィールドの左余白に「0」を詰めます。

      • 左余白に「0」が詰められているデータ同士のとき

      • 左余白に「0」が詰められているデータと左余白に空白が詰められているデータのとき

      • 左余白に「0」が詰められているデータと左余白にタブが詰められているデータのとき

    • 以下のような条件の集約フィールドを集約したとき、集約フィールド長に集約結果が満たない場合は、集約フィールドの左余白に空白を詰めます。

      • 左余白に空白が詰められているデータ同士のとき

      • 左余白にタブが詰められているデータ同士のとき

      • 左余白に空白が詰められているデータと左余白にタブが詰められているデータのとき

  • レコード集約機能の対象とならなかったレコード(キーフィールドの値が同一である他のレコードが存在しないレコード)の集約フィールドは、以下のように処理します。

    • optの指定がある場合は、optで指定された形式で出力します。

    • optの指定がない場合は、入力されたままの形式で出力されます。

記述例

  1. 入力レコードの7バイト目から長さ8バイトの内部10進数のフィールドを集約フィールドに指定する場合は、以下のように指定します。

    -g 6.8pdl
  2. テキストファイルの場合、入力レコードの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
           注) ここで示したレコードが、レコード集約機能の出力対象になったものとします。
  • テキストファイル浮動フィールド指定におけるレコード集約機能では、実際の集約フィールドの長さが集約フィールドとして指定された長さより短い場合、集約フィールドを指定された長さに拡張して出力します。集約フィールドの拡張により、レコード長が指定された最大レコード長を超えると、オーバフローが発生したものとして処理します。このため、テキストファイル浮動フィールド指定におけるレコード集約機能では、集約フィールドが集約フィールドとして指定された長さに拡張されることを考慮して、最大レコード長を指定してください。