フィールド(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}'なんてスクリプトをつくってしまう(やってみるとわかるが、使える範囲がとても限定される)。
このあたりも今後の課題ですネ。