シェルスクリプト(sh+tr)を使ってある統計内の割合を出す
タイトルだけでは分かりづらいのですが
こんな感じです
アクセス統計などで
今日の訪問者
Windows XP 10人
Linux 5人
と言った時にシェルスクリプトにオプションを与えるだけで合計値を出し、
そのうちのそれぞれがどれだけ占めているかを出すシェルスクリプトです。
sedやawkを使えばより柔軟に出来ますが、
やることが限られているので特に使わなくても良いでしょう。
基本的にshならばどのUn*xでも使えると思うので、
いや、こんなスクリプトいらないとか言わずにf(^_^;;
それでは先ずそのシェルスクリプトを貼ってしまいます。
# ヘルプ
if [ $# = 0 -o $1 = "-help" ]
then
echo percent.sh ver0.0.1
echo created by maruneko
echo -------------------
echo "percent.sh name1=val1[:name2=val2:...]"
echo "Don't include white space"
exit
fi
# トークンを作成
arg=`echo $* | tr : ' '`
cnt=0
for m in $arg
do
name[$cnt]=`echo $m | cut -d '=' -f 1`
data[$cnt]=`echo $m | cut -d '=' -f 2`
cnt=$(($cnt+1))
done
# 合計値を出す
sum=0
for num in ${data[@]}
do
sum=$(($sum + $num))
done
echo The total is $sum
# 表示する
cur=0
while [ $cur -lt $cnt ]
do
echo -n ${name[$cur]}=$(((${data[$cur]} * 100) / $sum))%
cur=$(($cur+1))
if [ $cur != $cnt ]
then
echo -n \:
fi
done
このスクリプトを走らせると、こんな感じになります
小数点などは残念ながら実装出来てません。
特に難しいところがあるわけでも無いですが
trコマンドを使うというところと
cutコマンドの使い方だけ注意すればいいですね。
こんな感じです
アクセス統計などで
今日の訪問者
Windows XP 10人
Linux 5人
と言った時にシェルスクリプトにオプションを与えるだけで合計値を出し、
そのうちのそれぞれがどれだけ占めているかを出すシェルスクリプトです。
sedやawkを使えばより柔軟に出来ますが、
やることが限られているので特に使わなくても良いでしょう。
基本的にshならばどのUn*xでも使えると思うので、
いや、こんなスクリプトいらないとか言わずにf(^_^;;
それでは先ずそのシェルスクリプトを貼ってしまいます。
percent.sh
#/bin/sh# ヘルプ
if [ $# = 0 -o $1 = "-help" ]
then
echo percent.sh ver0.0.1
echo created by maruneko
echo -------------------
echo "percent.sh name1=val1[:name2=val2:...]"
echo "Don't include white space"
exit
fi
# トークンを作成
arg=`echo $* | tr : ' '`
cnt=0
for m in $arg
do
name[$cnt]=`echo $m | cut -d '=' -f 1`
data[$cnt]=`echo $m | cut -d '=' -f 2`
cnt=$(($cnt+1))
done
# 合計値を出す
sum=0
for num in ${data[@]}
do
sum=$(($sum + $num))
done
echo The total is $sum
# 表示する
cur=0
while [ $cur -lt $cnt ]
do
echo -n ${name[$cur]}=$(((${data[$cur]} * 100) / $sum))%
cur=$(($cur+1))
if [ $cur != $cnt ]
then
echo -n \:
fi
done
このスクリプトを走らせると、こんな感じになります
$./percent.sh WinXP=10:Linux=5
The total is 15
WinXP=66%:Linux=33%
The total is 15
WinXP=66%:Linux=33%
小数点などは残念ながら実装出来てません。
特に難しいところがあるわけでも無いですが
trコマンドを使うというところと
cutコマンドの使い方だけ注意すればいいですね。