|
Contents
1 はじめに 2 一行の中にある世界 3 Awkのうごかしかた 4 短いプログラム 5 プログラム例 6 フォルダの検査 6.1 はじめに 6.2 ファイル情報のみを抽出する 6.3 ファイル名を抽出する 6.4 その他のデータを整形する 6.5 フォルダ検査の結果とまとめ 7 2つのファイルの比較と連想配列 7.1 はじめに 7.2 2つのファイルを読み込む 7.3 連想配列による比較 8 まとめとバッチファイル化 9 おわりに 10 参考文献・サイト |
6.2 ファイル情報のみを抽出する次に、それぞれの中身を見てみましょう。中身はdirコマンドの結果ですから、たとえば以下のように格納されています。
このファイルには様々な情報が入っていますから、ここからファイルの情報が書かれている行だけを抽出する方法を考えてみましょう。抽出した情報から、後で処理しやすい形にして出力したいと思います。 項の数に注目すると下のようになります。すると、ファイルの情報やフォルダの情報が書かれている行の項は5個以上であるのに対し、それ以外の行は3個以下であることがわかります。従ってファイルとフォルダの情報が入っている行だけを取り出す条件は、「行の項数が5個以上」となります。それぞれの行の項数は、NFという変数に入っているので、これを使います。 次に、フォルダとファイルの情報の行を分けることを考えます。2つの情報の違いは、ファイルのサイズを示す項が<DIR>という文字か、数字が入っているかです。この違いをチェックするには、項が2項の場合と3項の場合があるので、少し工夫が必要です。ここで、「"<"、">"という文字はファイル名には使えない」という規則を考慮すれば、ファイルの情報の入っている行には<DIR>という文字列は含まれないことがわかります。従って、行全体を表す$0を使えば、項の数が違っていても調べることができます。 以上より、ファイルの情報が入っている行だけを書き出すプログラムは、以下のように書くことができます。
[文字列変数] ~ /パターン/ は、その文字列変数にパターンで示される文字列が含まれるかどうかを表し、!~はその否定です。ですから $0 !~ /<DIR>/とは、その行が<DIR>という文字列を含まないどうかを表しています。このパターンは「正規表現」と呼ばれるものです。詳細については様々な参考書を見てください。 実行結果は、以下のようになります。
|