オス!IT格闘じいじだ。
メインフレームの現場で「データの並び替え、条件抽出、レイアウト変更が必要になった」とき、まさか毎回COBOLやPL/Iでプログラムをゴリゴリ書いてねえだろうな?
そのデータ処理、すべてソートユーティリティ(DFSORT / SYNCSORT)の制御カード(SYSIN)だけで完結するぜ!
プログラムを1本組んで、テストして、本番移行して……なんてやってる暇があったら、ソートカード数行でスマートに片付けちまおう。27年メインフレームのリングで戦ってきた俺から言わせれば、ソートを極めることは、運用の自動化やメンテナンスのスピードを劇的に跳ね上げる「最強のジャブ」を身につけるようなものだ。
今回は、現場のエンジニアや運用担当者が直面する「重複データの削除(SUM)」「柔軟なデータ加工(OUTREC)」「ICETOOLを使ったジョブ制御の自動化」など、ソートユーティリティが持つ全ポテンシャルをJCLサンプル付きで一挙に網羅した。
「え、ファイル結合までソートでできるの?」と思った若手も、日々の運用保守を効率化したいベテランも、まずはこの記事をブックマークして「現場で即役立つ逆引き辞書」として使い倒してくれ!
ソートユーティリティの7大マスター機能

制御カード(SYSIN)の組み合わせだけで実現できる、ソートの全戦闘スタイルがこれだ。
- 基本操作: SORT(並び替え)/ MERGE(併合) / COPY(単純コピー)
- フィルタリング: INCLUDE(抽出) / OMIT(除外)
- データ加工: INREC / OUTREC(レイアウト変更・値の上書き・条件分岐)
- 集計・要約: SUM(数値の合計・重複レコードの削除)
- マルチ出力: OUTFIL(条件別の複数ファイル分割・帳票ヘッダー作成)
- ファイル結合: JOINKEYS(SQLのような複数ファイルのキー結合)
- 高度なユーティリティ: ICETOOL(件数カウント・簡易レポート作成)
「プログラムレス」でここまで動くのが、メインフレームが誇る重戦車級のポテンシャルなんだぜ。
■ 【コピペ用】これさえあれば動く!基本のSORT JCL

まずは、全ての基本となる EXEC PGM=SORT のJCLテンプレートだ。現場で作業するときは、この形をベースにして SYSIN の中身を書き換えていけばOKだ。
//SORTJOB JOB (ACCOUNT),'SORT RUN',CLASS=A,MSGCLASS=X
//*-------------------------------------------------------------------
//* IT格闘じいじ直伝:基本のSORTユーティリティJCL
//*-------------------------------------------------------------------
//STEP01 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=YOUR.INPUT.DATASET,DISP=SHR
//SORTOUT DD DSN=YOUR.OUTPUT.DATASET,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(5,5),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,10,CH,A)
/*
じいじのワンポイント: SORT FIELDS=(1,10,CH,A) は、「1バイト目から10バイト分の文字(CH)を基準に、昇順(A)でソートせよ」という基本中の基本のコマンドだ。
■ 各機能のざっくり解説と制御カード例

今後、それぞれの詳細な攻略記事(子記事)をガッツリ公開していくが、まずは全体像を脳細胞に叩き込んでくれ!
レコードの抽出・除外(INCLUDE / OMIT)
ファイルの中から、特定の条件に合うデータだけを抜き出したり、不要なデータを弾く機能だ。
カード例:
INCLUDE COND=(11,2,CH,EQ,C'01')
(11バイト目から2バイトが「01」のレコードだけを抽出)
レイアウト変更・データ加工(INREC / OUTREC)
データの並び順を変えたり、スペースで桁数を増やしたり、特定の値を上書き(OVERLAY)できる。
カード例:
OUTREC FIELDS=(1,10,21,5,C'20260516')
(元データの1〜10バイトと21〜25バイトを抽出し、後ろに固定値の日付をくっつけて80バイトに整形)
重複削除と集計(SUM)
同じキーのデータが複数あった場合、1件だけにまとめたり(重複削除)、特定の数値フィールドを足し合わせることができる。
カード例(重複削除):
SUM FIELDS=NONE
(ソートキーが完全に一致するレコードを、先頭の1件だけ残して削除する神カードだ)
複数ファイルへの分割出力(OUTFIL)
1つの入力ファイルを、条件に応じて複数の出力ファイルへ同時に振り分ける強力な機能だ。
カード例:
OUTFIL FNAMES=OUT1,INCLUDE=(1,2,CH,EQ,C'01')
OUTFIL FNAMES=OUT2,SAVE
(1〜2バイト目が「01」ならDD名:OUT1へ出力し、それ以外をすべてDD名:OUT2へ一括保存する)
高度な技:複数ファイルの結合(JOINKEYS)
DBのSQLを使わなくても、2つのファイルを共通のキーでガッチャンコ(インナージイン・アウタージョイン)できる。これは詳細記事でガッツリ解説するぜ。
■ 一歩進んだ自動化なら「ICETOOL」を使いこなせ!

基本は PGM=SORT で十分だが、「データの件数をカウントして、0件ならジョブを異常終了(RC=12)させたい」とか「綺麗な表形式でサクッと出力したい」という時は、ラッパーツールである EXEC PGM=ICETOOL の出番だ。
ICETOOLを使う時は、処理を指示する TOOLIN と、具体的なソート条件を書く CNTL(任意のDD名)の2系統のカードを組み合わせるのが基本の型だ。
【コピペ用】ICETOOL実行JCLサンプル
//TOOLJOB JOB (ACCOUNT),'ICETOOL RUN',CLASS=A,MSGCLASS=X
//*-------------------------------------------------------------------
//* IT格闘じいじ直伝:空ファイルならRC=12で落とす自動化JCL
//*-------------------------------------------------------------------
//STEP01 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//INFILE DD DSN=YOUR.INPUT.DATASET,DISP=SHR
//OUTFILE DD DSN=YOUR.OUTPUT.DATASET,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(5,5),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//* [TOOLIN] ICETOOLへのコマンド指示
//TOOLIN DD *
SORT FROM(INFILE) TO(OUTFILE) USING(CTL1)
COUNT FROM(INFILE) EMPTY
/*
//*
//* [CTL1CNTL] SORT処理の具体的な制御カード
//CTL1CNTL DD *
SORT FIELDS=(1,10,CH,A)
/*
じいじのワンポイント: TOOLIN の中で「INFILE を CTL1(CTL1CNTLで定義)の条件でソートして OUTFILE に出せ」と指示し、次の行で「もし INFILE が空っぽ(EMPTY)なら戻り値12(RC=12)を返せ」という2段階のコンボを叩き込んでいる。これで後続ジョブの実行を自動で制御できる、運用保守で超使えるプロの技だぜ。
■ まとめ:ソートを制する者は、メインフレーム運用を制す

一社のお見送りや面接のミスマッチ(※前回の記事参照)で凹んでいる暇があったら、このソートカードを1行でも多く組んで、自分の「テクニカルな武器」を研ぎ澄まそうぜ。
JCLやソートカードは、正しく組めば100%裏切らない最強のカウンターパンチになってくれる。
次回からは、今回紹介した機能の中から、現場で一目置かれる「SUMカードを使った重複削除と数値集計の極意」をシステム開発・保守のリアルな実例付きで深掘りしていくぜ!
次戦に向けて、スキルもシステムも自動化(最適化)していこうぜ。
Status: Batch Processing (次戦のJCL投入準備完了だ!)
関連記事:






コメント