shellscriptの配列で管理している値を、pythonの標準入力に渡してリストで扱う+平均、標準偏差、最大、最小値まで求めてしまう
以下の続き
shellscriptの配列
test.sh
arr=("100" "200" "300")
arr+=("400")
echo ${arr[@]}
pythonの標準入力に渡してリストで扱う
test.py
data = list(map(int, input().split()))
from statistics import mean, median,variance,stdev
m = mean(data)
median = median(data)
variance = variance(data)
stdev = stdev(data)
print('mean: {0:.2f}'.format(m))
print('median: {0:.2f}'.format(median))
print('variance: {0:.2f}'.format(variance))
print('stdev: {0:.2f}'.format(stdev))
print('max: {}'.format(max(data)))
print('min: {}'.format(min(data)))
print('num: {}'.format(len(data)))
実行(test.sh
の出力をパイプでtest.py
に渡すバージョン)
$ bash test.sh | python test.py
mean: 250.00
median: 250.00
variance: 16666.67
stdev: 129.10
max: 400
min: 100
num: 4
実行(test.sh
の中からtest.py
を呼び出すバージョン)
test.sh
# declare
SCORE_ARRAY=()
LOOP_TIMES=10
TMP_LOG="tmp.log"
# append array
for i in `seq ${LOOP_TIMES}`
do
SCORE_ARRAY+=("${i}")
done
# calc static value
echo ${SCORE_ARRAY[@]} | python test.py > ${TMP_LOG}
MEAN=`cat ${TMP_LOG} | grep "mean" | cut -d' ' -f2`
STDEV=`cat ${TMP_LOG} | grep "stdev" | cut -d' ' -f2`
MAX=`cat ${TMP_LOG} | grep "max" | cut -d' ' -f2`
MIN=`cat ${TMP_LOG} | grep "min" | cut -d' ' -f2`
NUM=`cat ${TMP_LOG} | grep "num" | cut -d' ' -f2`
cat ${TMP_LOG}
echo "${MEAN}" "${STDEV}" "${MAX}" "${MIN}" "${NUM}"
$ bash test.sh
mean: 5.50
median: 5.50
variance: 9.17
stdev: 3.03
max: 10
min: 1
num: 10
5.50 3.03 10 1 10
shellscript中心の処理で、平均、標準偏差などを求めたい時に便利かも
参考