Chinaunix首页 | 论坛 | 博客
  • 博客访问: 942282
  • 博文数量: 146
  • 博客积分: 3321
  • 博客等级: 中校
  • 技术积分: 1523
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 10:32
文章分类

全部博文(146)

文章存档

2014年(2)

2013年(5)

2012年(4)

2011年(6)

2010年(30)

2009年(75)

2008年(24)

分类:

2009-09-09 22:37:49

最近老师交给我一个任务,统计上学期班里的成绩。写个小脚本简单的实现一下。


#!/bin/bash

#scriptname:statistic.sh
#实现功能:
#统计各科参加考试的人数
#在各科在各分数段的人数
#各分数段人数占总人数的比例
#author:along
#date:2009-9-9 22:25

#file从命令行获取成绩单文件

file=$1 #这从命令行获取成绩单文件
file_resualt=$2 #统计结果存放的文件
path="/tmp/score/" #临时文件的存放目录

if [ ! -f $file ]
then
    echo "成绩单文件不存在!"
    exit 0
fi

#课程名称

name=(\
  "C#及.NET技术"\
  "微机原理与汇编语言A"\
  "软件工程A"\
  "windows编程B"\
  "数据结构A"\
  "离散数学A"\
  "英语Ⅳ"\
)

#成绩所在的域
num=(\
 "7"\
 "7"\
 "8"\
 "7"\
 "8"\
 "8"\
 "7"\
)
#获取数组的长度
length=${#name[@]}

#判断path路径是否存在,若不存在则创建
if [ ! -d $path ]
then
    mkdir $path
fi

i=0
while [ $i -lt $length ]
do
    awk '$3~/'${name[$i]}'/{printf("%s \n",$"'${num[$i]}'")}' $file | sort | sed 's/\n/ /'> $path${name[$i]}
    i=`expr $i + 1`
done

#对文件中的成绩进行统计
i=0
while [ $i -lt $length ]
do

    s1=0    #记录成绩在90-100的人数
    s2=0    #记录成绩在80-89的人数
    s3=0    #记录成绩在70-79的人数
    s4=0    #记录成绩在60-69的人数
    s5=0    #记录成绩在60以下的人数
    sum=0    #记录总人数

    for score in `cat $path${name[$i]}`
    do
        if [ $score -ge "90" ]
        then
            s1=`expr $s1 + 1`
    
        elif [ $score -ge "80" ] && [ $score -le "89" ]
        then
            s2=`expr $s2 + 1`
    
        elif [ $score -ge "70" ] && [ $score -le "79" ]
        then
            s3=`expr $s3 + 1`
            elif [ $score -ge "60" ] && [ $score -le "69" ]
        then
            s4=`expr $s4 + 1`
        else
            s5=`expr $s5 + 1`
        fi
    done
    sum=$(($s1 + $s2 + $s3 + $s4 + $s5))
    
    
    echo "---------------${name[$i]}---------------------" >>$file_resualt
    echo "分数段    90-100    80-89    70-79    60-69    <60" >>$file_resualt
    echo "人数    $s1    $s2    $s3    $s4    $s5" >>$file_resualt
    s1=`echo "scale=3; $s1 / $sum" | bc`    
    s2=`echo "scale=3; $s2 / $sum" | bc`    
    s3=`echo "scale=3; $s3 / $sum" | bc`    
    s4=`echo "scale=3; $s4 / $sum" | bc`    
    s5=`echo "scale=3; $s5 / $sum" | bc`    

    s1=`printf "%0.3f" $s1`
    s2=`printf "%0.3f" $s2`
    s3=`printf "%0.3f" $s3`
    s4=`printf "%0.3f" $s4`
    s5=`printf "%0.3f" $s5`

    #echo "---------------${name[$i]}--------------" >>result
    #echo "90-100    80-89    70-79    60-69    <60" >>result
    echo "比例    $s1    $s2    $s3    $s4    $s5" >>$file_resualt
    echo "总人数:$sum" >> $file_resualt
    echo -e "\n\n">> $file_resualt

    i=`expr $i + 1`
done
rm -fr $path

运行时需要指定源文件和统计结果存放的文件如:
./statistic.sh  file  resualt
阅读(1383) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~