備忘録のつもりで平均だけを計算する簡単なメモにしようと思ったのですが、最大値も出してみようか?最小値もとかやってみたのです。
今更ながらawkの有り難味を感じながら。。。。w(←今更awkかよ!?)
Linux環境で 指定フォルダー以下にある特定ファイルの 以下の情報を調査します。
- ファイルの平均サイズ
- ファイルの最大サイズと最小サイズ
ファイルの平均サイズ
1 2 |
# find . -name *.jpg -ls | awk '{s+=$5; n++} END {p rint s/n}' |
解り易いように、lsの部分を少し展開してみたコマンドは以下の通りです。
1 2 |
# find . -name *.jpg | xargs ls -l | awk '{s+=$5; n++} END {p rint s/n}' |
findやlsコマンドで個々のファイルサイズを表示させて、そのサイズ部分だけをawkで抜出し、合計値(s)を計算するのとそのファイル数(n)をカウント。
最後に合計値(s)/ファイル数(n)で平均値を計算しています。
合計値を取りたい場合には、ファイル数(n)で割らなければ良いだけです。
一定期間のファイル数やファイルサイズなども、findで探すファイルを限定することで計算出来ますね。
※ファイルサイズが0のファイルもファイル数としてカウントされます。
ファイルの最大サイズと最小サイズ
ファイルの最大サイズと最小サイズを確認するコマンドは以下の通りです。
1 |
# find . -name *.jpg -printf "%s\n" | awk '{if(min==""){min=max=$1};if($1>max){max=$1};if($1<min&&$1!=0){min=$1};}END{print "min="min,"\nmax="max}' |
少し細工をしています。取り出したファイルのサイズが0の時はそのサイズを無視しています。
合わせ技!
大したことはありません。ただ単純に、上記の両方を一気に計算してしまおうという話です。
ただし、ファイルサイズが0のファイルは無視します。つまり、平均ファイルサイズの対象からサイズが0のファイルは除かれますので、上記の方法とは少し異なります。
1 2 |
# find . -name *.jpg -printf "%s\n" | awk '{if(min==""){min=max=$1};if($1>max){max=$1};if($1<min&&$1!=0){min=$1};if($1>0){s+=$1;n++;}}END{pri nt "min="min,"\nmax="max,"\nave="s/n}' |
こんな感じです(^^♪
しばらく使わないとすぐに忘れてしまうので、備忘録大事ですねw