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 作成