« Linux特権ユーザー権限を取得する | トップページ | 治安維持法制定で上がりとなります。 »

2015年9月16日 (水)

知ったかぶりDOS リダイレクト及びパイプライン

 にほんブログ村 経済ブログへ

 MS-DOSのリダイレクトとパイプラインとFINDコマンドで検索システムを作成したことがあります。かれこれ30年も前のことです。

 メモとして残しておきます。いまでも古本で売られてますが、ピート・メテウ゛ェーレスさんの「MS-DOSファィル整理学」という本が大変参考になりました。

 DOSの命令は、COMMAND.COMに多くが収められています。これを内部コマンドといいます。また、それ以外に別途用意されている命令を外部コマンドといいます。COPY複写、DIRファィル一覧、FORMAT初期化のような命令は内部コマンドですが、検索FIND,SORT分類、MORE一画面表示は、外部コマンドです。したがって、FIND,SORT,MOREフィルターコマンドがなければ次のプログラムは動きません。

 Linuxのbashのようなものです。このCOMMAND.COMにリダイレクトとかパイプラインの命令が予め規則として決められています。

 リダイレクトとは、標準入出力の変更のことです。

 普通は、ディスプレイに表示されますが、リダイレクトを利用するとファイルに変更したり、プリンターに変更したりするものです。

 標準で入力はキーボードに割り当てられ、標準で出力はCRTに、標準でエラーはCRTに割り当てられています。

 リダイレクトするには、
 < この記号が標準入力のリダイレクト記号です。
 > この記号が標準出力のリダイレクト記号です。全て上書きされます。
 >>この記号が標準出力のリダイレクト記号です。データの末尾に追記されます。

 パイプラインとは、出力データを次の作業に送ることです。

 例えば
 FIND "文書"  C:¥INDEX.TXT | SORT / +19 | MORE

1) CドライブのルートディレクトリーにあるINDEX.TXTファイルを読み込み、FINDコマンドで文字列「文書」を含むデータを検索しなさい。

2)その結果を次の処理に引き渡しなさい。引き渡されたデータをSORTコマンドで19カラム目で昇順に並べ替えなさい。

3)並べ変えた結果は、次の処理に引き渡しなさい。引き渡されたデータは、1ページづつ表示しなさい。

リダイレクトを利用してCRTでなくてプリンターに出力したい時は

FIND "文書"  C:¥INDEX.TXT | SORT / +19>PRT

とする。

 これで1万行程度ですと瞬時に検索します。

以上は、DOSプロンプトから直接コマンドを入力するものです。

 これをバッチ処理として定形化したものが次の処理です。

検索.bat

ECHO  検索中、お待ち下さい。
FIND "%1"  C:¥INDEX.TXT | SORT / +19 | MORE
FIND "%1"  C:¥INDEX.TXT | SORT / +19 | MORE>C:¥一次検索.TXT

このバッチファィルの起動は、プロンプトでバッチファィル名を入力すると起動します。
バッチファィルにパラメーター指定がありますので、起動とともに、パラメーターを指定する必要があります。

>検索 文書

のように入力します。パラメーターは、文書となり、%1に格納されてFINDコマンドが実行されます。
最初にECHOコマンドが実行され、CRTには、「検索中、お待ち下さい。」が表示されます。

次に2行目のコマンドが実行されます。

次に3行目のコマンドが実行され、最後のところでリダイレクトされて、CRTからC:ドライブのルートディレクトリーに一次検索.TXTを作成して、格納することになります。

一次検索ファィルを検索するバッチを作り、>一次検索 検索語でまた検索するような工夫もできます。

 しかし、一行検索は、データが254文字という限界がありました。この限界を破ったのがSEDです。

 パラグラフ検索は、次のようにプログラムでできます。

 パラグラフ検索とは、京大カードのようなデータです。SEDと同じディレクトリーにおかないと上手く作動しない筈です。

手引検索.bat

ECHO OFF
IF "%1" =="" GO TO USAGE
IF "tebiki.txt" =="" GO TO USAGE
SED -o bun.txt ":LOOP;/%!/b PRINT;/\N$/b exit;N:b LOOP;:PRINT;n:/~$/!
b PRINT;b:exit;d" tebiki.txt
go to end
:USAGE
:END
type bun.txt|more
ECHO

>手引検索 検索語 のように使用します。

補足1

 DOSを扱うには、アクセサリーのwindows powershellを開きますが、知ったかぶりで会社のパソコンを開いて、コマンドを入力すると動くことは動きますが、思わぬトラブルが発生し、損害賠償請求される恐れが多分にありますので、絶対にしてはいけません。するなら自宅のパソコンでするべきです。

補足2

ディレクトリーの移動ができることは、コマンドを扱う場合には、必須です。

ディレクトリー移動は、cd でおこないます。Change directoryの略です。

cd..   で上の階へ移動です。このコマンドを繰り返すとルートディレクトリーまで辿ることができます。戻る時はdir でディレクトリーを確認して、cd ディレクトリー名です。

cd ¥は、いきなり最上階まであがります。cd a:¥でドライブ変更です。

シェルを終了するときは、EXITです。

補足3

ファイルの内容を確認するには、TYPE ファィル名でします。

補足4

新たにディレクトリーを作成するには、MDです。削除はRDです。

MD A:¥rensyu のようにします。

補足5

 京大カードのような複数行のデータを扱うには、SEDを使用します。データとデータの間に空白を開けてデータを識別します。

補足6

Linuxでgrepを使用すると次のようになります。

結構面倒くさい。

検索は GREP "検索語"  対象ファィル名 で行います。

これをバッチ処理するには、シェルスクリプトというテキストファィルを作成します。これがプログラムになります。

kensaku.sh

#1/bin/sh   -------------------------------------------→必須行お約束

grep "検索語"  rensyu.txt | more -------------検索の対象ファィルをrensyu.txtにしてます

rensyu.txt

1  鈴木道夫 昭和24年  千歳市 桜木 012-42-1603
2 立花新 昭和3年  札幌市 富岡 011ー23ー4506
3  佐藤新造 昭和2年      苫小牧 桜木 013-42-1603
4 田中花子 昭和3年      釧路      富田  011ー23ー4506
5  工藤光男 昭和21年    稚内   桜   023-42-1603
6 須賀徹 昭和39年   恵庭   岡   011ー23ー4506
7  斎藤善三 昭和24年   小樽   桜木  03-42-1603
8 袴田太郎 昭和31年    函館   富岡  011ー23ー4506
9  鈴木花 昭和24年  千歳市 桜木 012-42-1603
10 立花一郎 昭和3年  札幌市 富岡 011ー23ー4506
11  佐藤三郎 昭和2年      苫小牧 桜木 013-42-1603
12 田中吾郎 昭和3年      釧路      富田  011ー23ー4506
13  工藤健太 昭和21年    稚内   桜   023-42-1603
14 須賀純子 昭和39年   恵庭   岡   011ー23ー4506
15  斎藤ミツ 昭和24年   小樽   桜木  03-42-1603
16 袴田ハナ 昭和31年    函館   富岡  011ー23ー4506
17  鈴木吾郎 昭和24年  千歳市 桜木 012-42-1603
18 立花健三 昭和3年  札幌市 富岡 011ー23ー4506
19  佐藤進 昭和2年      苫小牧 桜木 013-42-1603
20 田中正三 昭和3年      釧路      富田  011ー23ー4506
21  工藤寛太 昭和21年    稚内   桜   023-42-1603
22 須賀吾郎 昭和39年   恵庭   岡   011ー23ー4506
23  斎藤守 昭和24年   小樽   桜木  03-42-1603
24 袴田真一 昭和31年    函館   富岡  011ー23ー4506
25  鈴木大五郎 昭和24年  千歳市 桜木 012-42-1603
26 立花大蔵 昭和3年  札幌市 富岡 011ー23ー4506
27  佐藤香 昭和2年      苫小牧 桜木 013-42-1603
28 田中誠 昭和3年      釧路      富田  011ー23ー4506
29  工藤新造 昭和21年    稚内   桜   023-42-1603
30 須賀一斉 昭和39年   恵庭   岡   011ー23ー4506
31  斎藤大三郎 昭和24年   小樽   桜木  03-42-1603
32 袴田寛太 昭和31年    函館   富岡  011ー23ー4506

これを実行するには、実行権限を与える

$ chmod +x kensaku.sh リターン

$ ./kensaku.sh   リターンでプログラムを実行します。

シェル変数を定義する 例 kensakugo=田中

set | more で確認するとkensakugo=田中と定義されていることが分かります

ECHO $kensakugo でCRT表示すると

田中

とでます。

GREP "$kensakugo" rensyu.txt  で田中を含むデータが抽出されます。

4 田中花子 昭和3年      釧路      富田  011ー23ー4506
12 田中吾郎 昭和3年      釧路      富田  011ー23ー4506
20 田中正三 昭和3年      釧路      富田  011ー23ー4506
28 田中誠 昭和3年      釧路      富田  011ー23ー4506

しかし、

Kensaku2.sh

#1/bin/sh   -------------------------------------------→必須行お約束

grep "$kensakugo"  rensyu.txt | more -------------シェル変数を検索対象とする。

ところが、上手くいかない。理由が不明。DOSのパラメーター指定のようには簡単にできない。

 

« Linux特権ユーザー権限を取得する | トップページ | 治安維持法制定で上がりとなります。 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/577632/62290875

この記事へのトラックバック一覧です: 知ったかぶりDOS リダイレクト及びパイプライン:

« Linux特権ユーザー権限を取得する | トップページ | 治安維持法制定で上がりとなります。 »

2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フォト
無料ブログはココログ

最近のトラックバック

ウェブページ