GNU Awk 3.0.6 + multi-byte extension 1.15
”ls -l ”で の 標準出力を 見てみよう またその 追加の形も見ておこう
Pmt> ls -l 合計 8 -rw-r--r-- 1 nyan users 293 1月 13日 16:21 014_awkscr drwxr-xr-x 2 nyan users 4096 1月 13日 16:22 u_data/ Pmt> ls -l $* 合計 8 -rw-r--r-- 1 nyan users 293 1月 13日 16:21 014_awkscr drwxr-xr-x 2 nyan users 4096 1月 13日 16:22 u_data/ Pmt> ls -l | awk '{print $9}' 014_awkscr u_data/ Pmt> ls -l | awk '{print $5}' 293 4096
これらから フィールドは 9個 有るようである フィールドの 5は ファイ ルの大きさ で フィールドの 9 は ファイル(ディレクトリの場合も あるよう だが)の 名前を示している
ほんなら
Pmt> ls -l | awk '{ print $5,$9}' 293 014_awkscr 4096 u_data/ Pmt> ls -l | awk '{ print $5,"\t",$9}' 293 014_awkscr 4096 u_data/
少し修正して sh スクリプトを 作ってみる 即ち
Pmt> cat 014_bash.sh #!/bin/sh ls -l $* | awk '{ print $5,"\t",$9}' Pmt> ls -l 014_bash.sh -rw-r--r-- 1 nyan users 48 1月 13日 21:24 014_bash.sh
Pmt> source 014_bash.sh 293 014_awkscr 48 014_bash.sh 4096 u_data/ Pmt> ls -l | awk '{print $5,"\t",$9}' 293 014_awkscr 48 014_bash.sh 4096 u_data/
そこで もう少し 付け加えてみる 和を 求める 総数を 求める
sum += $5 ++filenum
として 付け加えると
Pmt> cat 015_bash.sh #!/bin/sh ls -l $* | awk ' BEGIN { print "BYTES", "\t", "FILE" } { sum += $5 ++filenum print $5,"\t",$9 } END { print "Total: ", sum, "bytes (" filenum " files)" }'
ほたら どうなるか、まず ファイルを確認
Pmt> ls -l | awk '{ print $5 , "\t" , $9}' 112 010_awkscr 34 011_awkscr 125 012_awkscr 293 013_awkscr 48 014_bash.sh 214 01_awkscr 721 01_phone_test 183 02_awkscr 188 03_awkscr 83 03_blank_lines 228 04_awkscr 226 05_awkscr 189 06_awkscr 50 07_awkscr 135 08_awkscr 91 09_awkscr
この状態で
Pmt> source ../../015_bash.sh BYTES FILE 112 010_awkscr 34 011_awkscr 125 012_awkscr 293 013_awkscr 48 014_bash.sh 214 01_awkscr 721 01_phone_test 183 02_awkscr 188 03_awkscr 83 03_blank_lines 228 04_awkscr 226 05_awkscr 189 06_awkscr 50 07_awkscr 135 08_awkscr 91 09_awkscr Total: 2920 bytes (17 files) Pmt> source ../../015_bash.sh | cat -n 1 BYTES FILE 2 3 112 010_awkscr 4 34 011_awkscr 5 125 012_awkscr 6 293 013_awkscr 7 48 014_bash.sh 8 214 01_awkscr 9 721 01_phone_test 10 183 02_awkscr 11 188 03_awkscr 12 83 03_blank_lines 13 228 04_awkscr 14 226 05_awkscr 15 189 06_awkscr 16 50 07_awkscr 17 135 08_awkscr 18 91 09_awkscr 19 Total: 2920 bytes (17 files)
なにか ピッタリとは来ない 良いようではあるが しかし ながら という感じ である
Pmt> bc -q 112+34+125+293+48+214+721+183+188+83+228+226+189+50+135+91 2920
そこで もう少し 改良を加える 以下 参考にしたもの そのままの コピーで ある。
Pmt> cat ../../016_shell.sh ls -l $* | awk ' # filesum: list files and total size in bytes # input: long listing produced by "ls -l" #1 output column headers BEGIN { print "BYTES", "\t", "FILE" } #2 test for 9 fields; files begin with "-" NF == 9 && /^-/ { sum += $5 # accumulate size of file ++filenum # count number of files print $5, "\t", $9 # print size and filename } #3 test for 9 fields; directory begins with "d" NF == 9 && /^d/ { print "<dir>", "\t", $9 # print <dir> and name } #4 test for ls -lR line ./dir: $1 ~ /^\..*:$/ { print "\t" $0 # print that line preceded by tab } #5 once all is done, END { # print total file size and number of files print "Total: ", sum, "bytes (" filenum " files)" }'
それでは
Pmt> source ../../016_shell.sh BYTES FILE 112 010_awkscr 34 011_awkscr 125 012_awkscr 293 013_awkscr 48 014_bash.sh 214 01_awkscr 721 01_phone_test 183 02_awkscr 188 03_awkscr 83 03_blank_lines 228 04_awkscr 226 05_awkscr 189 06_awkscr 50 07_awkscr 135 08_awkscr 91 09_awkscr Total: 2920 bytes (16 files)
こういう感じです、この使いかた
にゃんたろう 拝!
GNU Awk 3.0.6 + multi-byte extension 1.15
2007年 1月11日 (木) 22:01:21 JST 作成