フィールド(2)


さきにつくった total_awk というスクリプトをすこし改良してみる。

スクリプト言語の bash は、そのなかにコマンドをそのまま取り込めるらしい。

以下の点もできるかどうかを考えてみた。

というわけで

$vi file_space

として、以下のテキストを打ち込む。

------------------------------------------

#!/bin/bash
awk '! /^d/ {s += $5} END {print "φ(-_-) . . ."s}'

( awk から "s}' までは 一行で表示 )

------------------------------------------

1行目の #!/bin/bash は bash を起動させるための定義文。

awk をコマンドとして使うときには、処理する内容等を ' と ' でかこむ。

awk は、最初に全行文のなかから / と / ではさまれた部分にある文字列あるいは数字と一致する文字列/数字をもつ行のみを取り出す。

^d は行文の先頭が d のこと。

! は後の文章を否定するシルシ。

つまり ! /^d/ は全体の行のなかからディレクトリ以外の行だけをあつめる - ということになる。

あとは total_awk とほぼ同じです。

chmod コマンドで実行可能ファイルにする。

$chmod 755 file_space

------------------------------------------

使いかたは、

$ls -l (ディレクトリ名) | ./file_space

と打ち込む。

φ(-_-) . . . XXXXXXX

と表示されるはずである。

バイト数も 107 byte から 61 byte に減っている。

(注意)
自作のスクリプトは、コマンド類と違い - 原則として - ホームディレクトリ以外では使えない。いつもそのことに留意しておかないと . . . .

#!/bin/bash
ls -l | awk '! /^d/ {s += $5} END {print "φ(-_-). . ."s}'

なんてスクリプトをつくってしまう(やってみるとわかるが、使える範囲がとても限定される)。

このあたりも今後の課題ですネ。


きょうの UNIX