カテゴリ: COBOL 更新日: 2026/05/27

COBOLと外部ツールの連携技!初心者でもわかるsed・awkと運用スクリプトの組み合わせ手法

外部ツール(sed, awkなど)との組み合わせ例
外部ツール(sed, awkなど)との組み合わせ例

先生と生徒の会話形式で理解しよう

生徒

「COBOLのプログラムを使って文字や数値のデータを加工しているのですが、もっと簡単にデータを並び替えたり、特定の文字を置き換えたりする方法はありますか?」

先生

「それなら、Linuxなどのパソコン環境でよく使われるsedやawkといった外部ツールと、COBOLのCLIツールを組み合わせるのがおすすめですよ。」

生徒

「せど?おーく?初めて聞く名前です。パソコンを触ったことがない私でも、自動化用の運用スクリプトでそれらを上手に連動させることができますか?」

先生

「大丈夫です。それぞれのツールが得意な仕事を分担することで、驚くほど短い手順で複雑なデータ加工ができるようになります。基本から順番に解説しますね!」

1. 外部ツールとCOBOLを組み合わせるメリット

1. 外部ツールとCOBOLを組み合わせるメリット
1. 外部ツールとCOBOLを組み合わせるメリット

企業の基幹システムや大規模なデータ処理で大活躍しているCOBOLですが、すべての処理をCOBOLプログラムだけで作ろうとすると、文字の置き換えやデータの並び替えのためだけに何十行ものコードを書かなければならず、初心者にとっては少し大変に感じることがあります。そこで役立つのが、パソコンのシステムに最初から用意されている便利で小さなプログラムたちです。これらを外部ツールコマンドと呼びます。

プログラミングを経験したことがない方に分かりやすく例えると、家を建てる大工さんの作業と同じです。COBOLが家の大黒柱を切り出す「大きな電動のこぎり」だとすれば、外部ツールは細かい部分を削る「かんな」や、表面を整える「やすり」のようなものです。大きな道具だけで無理に細かい作業をしようとせず、小さな得意道具を適材適所で組み合わせることで、文字だけの画面で動くCLIツールや、それを自動実行する運用スクリプトの作成が劇的に楽になります。

2. 文字を自動で置き換えるsedとは何か

2. 文字を自動で置き換えるsedとは何か
2. 文字を自動で置き換えるsedとは何か

外部ツールの中でも特に有名なものの一つが、sed(セド)です。これは「ストリームエディタ」という英語の頭文字を取ったもので、簡単に言うと「ファイルを開くことなく、中身の文字を自動で検索して別の文字にガバッと一瞬で置き換えてくれる道具」です。皆さんが普段スマートフォンやパソコンのメモ帳で行っている「文字の置換(ちかん)」という操作を、全自動で高速に行ってくれる役割を持っています。

例えば、COBOLプログラムが吐き出したデータの中に「東京支店」という文字がたくさん入っていたとします。これをすべて「TOKYO」という英語に修正したいとき、わざわざCOBOLのプログラムを作り直して再度実行しなくても、sedという道具を一行呼び出すだけで、テキストファイルの中身を一瞬で書き換えることができます。時間の節約にもなり、システムの保守管理が非常にスムーズになります。

3. データを綺麗に切り出すawkの基本知識

3. データを綺麗に切り出すawkの基本知識
3. データを綺麗に切り出すawkの基本知識

もう一つの強力な相棒が、awk(オーク)です。これは開発した三人の天才プログラマーの名前の頭文字を合わせたもので、データが縦と横に綺麗に並んだ表形式のファイルを扱うのが大得意なツールです。ファイルの中から「特定の列(縦の列)だけを切り出す」「数値を合計する」といった高度なデータ加工を、わずか数文字の命令で実現してしまいます。

学校の名簿をイメージしてください。「出席番号、名前、点数」がカンマという記号で区切られて並んでいるとき、awkを使えば「2列目の名前だけを全部抜き出して一覧表にする」といった作業が朝飯前で完了します。COBOLは決まった長さのデータをきっちり処理するのが得意ですが、awkは区切り記号で区切られた柔軟なデータを整えるのが得意なので、二つがタッグを組むと最強のデータ処理環境ができあがります。

4. パイプを使ってデータを次の道具へ手渡す仕組み

4. パイプを使ってデータを次の道具へ手渡す仕組み
4. パイプを使ってデータを次の道具へ手渡す仕組み

複数のツールを連動させるときに、最も重要になるパソコンの仕掛けがパイプです。これは、画面上で縦棒の記号を使って表現される命令で、文字通り「一つのプログラムが計算して吐き出した結果を、ファイルを挟むことなく、そのまま次のプログラムの入り口へ土管のように直接流し込む仕組み」のことを言います。

このパイプの仕組みを覚えると、COBOLプログラムが実行して出力したお知らせ情報を、そのままsedに渡して文字を綺麗に整え、さらにそれをawkに渡して必要な部分だけを抜き取る、というように、道具から道具へとバケツリレーのようにデータを渡していくことができます。途中で何回もファイルに保存し直す手間が省けるため、パソコンのメモリにも優しく、高速に動作する運用スクリプトを作成できます。

5. COBOLプログラムから外部ツールの入力を受け取る連携方法

5. COBOLプログラムから外部ツールの入力を受け取る連携方法
5. COBOLプログラムから外部ツールの入力を受け取る連携方法

まずは、外部ツールが加工して用意してくれたデータを、COBOLプログラムが受け取って処理するシンプルな仕組みを見てみましょう。COBOLでは、画面から文字を入力するためのACCEPTという命令を使います。この命令を書いておくと、外部ツールからパイプを通じて流れてきたデータを、変数と呼ばれるデータを入れる箱に順番に取り込むことができます。

以下のコードは、外部から流れてきた社員コードを一つずつ受け取って、画面に親切な案内文を付け足して表示するCOBOLプログラムです。非常に短くシンプルに書かれているため、未経験の方でも流れが追いやすくなっています。


IDENTIFICATION DIVISION.
PROGRAM-ID. COMBINE1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  W-INPUT-DATA    PIC X(10) VALUE SPACES.
PROCEDURE DIVISION.
    ACCEPT W-INPUT-DATA
    DISPLAY "【COBOL受信】処理対象のコード: " W-INPUT-DATA
    STOP RUN.

このプログラムに対して、外部の文字置き換えツールであるsedを使って作成したデータを、パイプ記号で流し込んで実行します。実際のスクリプト内での記述例は以下のようになります。


# エコー命令で出力した文字の「smp」を「EMP」にsedで置き換えてからCOBOLに渡す
echo "smp-001" | sed "s/smp/EMP/" | ./COMBINE1

この結果、COBOL側にはすでにsedによって綺麗に変換されたデータが届くため、プログラムの実行結果は以下のようになります。


【COBOL受信】処理対象のコード: EMP-001   

6. COBOLの出力データをawkで集計して整形する実践例

6. COBOLの出力データをawkで集計して整形する実践例
6. COBOLの出力データをawkで集計して整形する実践例

次は反対に、COBOLプログラムが計算して出力した複数のデータを、後ろに控えているawkを使って加工してみましょう。COBOLは金額などのデータを画面に出力する役割に専念し、その後の「余計な文字を削って数字だけを取り出す」という作業を外部ツールに任せる設計にします。このように役割を明確に分けることで、プログラムの可読性とメンテナンス性が劇的に向上します。

以下のプログラムは、売上データとして日付と金額をスペースで区切って続けて出力するCOBOLのコードです。日常の業務処理でよく見かける標準的な記述方法をベースにしています。


IDENTIFICATION DIVISION.
PROGRAM-ID. COMBINE2.
PROCEDURE DIVISION.
    DISPLAY "20260521 1500"
    DISPLAY "20260521 2300"
    STOP RUN.

このCOBOLプログラムを動かして出てきた文字列から、後ろの2列目にある数値(金額)だけをawkを使って抜き出し、さらにその場で足し算をして合計金額を計算する運用スクリプトの書き方です。


# COBOLの出力の2列目を足し算して最後に合計を表示するawkの命令
./COMBINE2 | awk '{sum += $2} END {print "本日の総売上金額は: " sum " 円"}'

手作業で計算することなく、外部ツールが自動的に数字を計算して集計してくれるため、以下のような分かりやすい実行結果が画面に表示されます。


本日の総売上金額は: 3800 円

7. 運用スクリプトでエラーログを自動抽出する応用手法

7. 運用スクリプトでエラーログを自動抽出する応用手法
7. 運用スクリプトでエラーログを自動抽出する応用手法

実際の開発現場では、COBOLプログラムが動いたときの日記である「ログファイル」を監視して、異常が発生していないかを自動でチェックする運用スクリプトがよく使われます。ここでも外部ツールの力が大いに発揮されます。COBOLプログラムに不具合の発生を想定した動きをさせ、その出力をキャッチしてみましょう。

以下のプログラムは、何らかの理由で処理が失敗したときに、エラーの目印となる文字を画面に出力するCOBOLコードです。これが出発点となります。


IDENTIFICATION DIVISION.
PROGRAM-ID. COMBINE3.
PROCEDURE DIVISION.
    DISPLAY "[INFO] 処理を順調に進めています。"
    DISPLAY "[ERROR] データベースの接続に失敗しました。"
    STOP RUN.

この出力結果から、sedを使って不具合の行だけを特定し、さらにその中のエラーという文字を目立つように括弧付きの記述に書き換えてから画面に表示する、防犯対策のようなスクリプトの連携例です。


# ERRORという文字が含まれる行だけを抜き出し、文字を装飾して表示する
./COMBINE3 | sed -n '/ERROR/s/ERROR/!!重大な異常発生!!/p'

通常のお知らせである一行目の記述は完全に無視され、管理者が見るべき危険な二行目の内容だけが、分かりやすく修正されて以下のように出力されます。


[!!重大な異常発生!!] データベースの接続に失敗しました。

8. 安全に組み合わせるための環境設定の注意点

8. 安全に組み合わせるための環境設定の注意点
8. 安全に組み合わせるための環境設定の注意点

ここまでご紹介したように、COBOLと外部ツールを組み合わせると非常に便利ですが、初心者が運用を始めるにあたって一つだけ注意しなければならないセキュリティ上のポイントがあります。それは、使用するツールやファイルの場所を、曖昧に書かないということです。パソコンの中に、同姓同名の別の怪しいプログラムが紛れ込んでいた場合、そちらが間違って起動してしまう危険性があるからです。

これを防ぐために、自動化スクリプトの中では、各コマンドがパソコンのどこの部屋(フォルダー)に置いてあるのかを「フルパス」と呼ばれる住所のような形式できっちり指定するか、プログラムの探し場所のルールを定めた環境変数の設定をはじめに正しく行う必要があります。こうした小さな安全対策を積み重ねることで、誰が使っても絶対に誤作動を起こさない、頑丈で信頼性の高いシステムを構築できるようになります。

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのEVALUATE文の使い方を完全ガイド!初心者でもわかる多岐選択
New2
C#
C#の拡張メソッドとは?既存クラスに機能を追加する便利技
New3
C#
ASP.NET CoreとC#の例外処理ベストプラクティス!エラーハンドリングの基本と実装方法
New4
Azure
Azure WAFとは?SQLインジェクションやXSSからWebサイトを守る初心者ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.3
Java&Spring記事人気No3
C#
C# WinForms入門!初心者でも簡単にWindowsアプリを作る方法
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLのファイルステータス(FILE STATUS)の使い方を完全ガイド!初心者でもわかるエラー処理の基本
No.6
Java&Spring記事人気No6
C#
C#のイベント処理を完全攻略!WinFormsとWPFの基本を解説
No.7
Java&Spring記事人気No7
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.8
Java&Spring記事人気No8
C#
C#の文字列を数値に変換する方法(int.Parse・TryParse)をわかりやすく解説!