[code][root@localhost tmp]# cat classavg.txt
Name Chinese Math C Mysql
Me 97 99 87 78
li 87 90 64 49
wang 68 73 59 92
zhang 93 49 92 58
zhou 60 99 88 50[/code]求每个人的总成绩和平均成绩;
求每门课程的平均成绩;
求每门课程高于和低于平均成绩的人数;
并连同原数据一起列印出来。[code][root@localhost tmp]# sh avg.sh classavg.txt
Name Chinese Math C Mysql TOTAL_stu AVG_stu
Me 97 99 87 78 361 90.25
li 87 90 64 49 290 72.5
wang 68 73 59 92 292 73
zhang 93 49 92 58 292 73
zhou 60 99 88 50 297 74.25
===============================================================
AVG_cls 81 82 78 65.4 # #
AVG>= 3 3 3 2
AVG< 2 2 2 3
[root@localhost tmp]# [/code]脚本代码如下vi avg.sh[code]#!/bin/bash
awk '
NR==1{print $0"\tTOTAL_stu\tAVG_stu"
next
}
{TOTAL_stu=0;for(i=2;i<=NF;i++)
TOTAL_stu+=$i
AVG_stu=TOTAL_stu/(NF-1)
printf("%s\t%g\t\t%g\n",$0,TOTAL_stu,AVG_stu)
AVG_F2[NR] = $2
AVG_F3[NR] = $3
AVG_F4[NR] = $4
AVG_F5[NR] = $5
AVG_CN_total += $2
AVG_Math_total += $3
AVG_C_total += $4
AVG_Mysql_total += $5
}
END{
AVG_CN = AVG_CN_total/(NR-1)
AVG_Math = AVG_Math_total/(NR-1)
AVG_C = AVG_C_total/(NR-1)
AVG_Mysql = AVG_Mysql_total/(NR-1)
for(i=2;i<=NR;i++)
{ if (AVG_F2[i]>=AVG_CN)
++AVG_above_CN
else ++AVG_below_CN
if (AVG_F3[i]>=AVG_Math)
++AVG_above_Math
else ++AVG_below_Math
if (AVG_F4[i]>=AVG_C)
++AVG_above_C
else ++AVG_below_C
if (AVG_F5[i]>=AVG_Mysql)
++AVG_above_Mysql
else ++AVG_below_Mysql
}
print "==============================================================="
OFS="\t";print "AVG_cls",AVG_CN,AVG_Math,AVG_C,AVG_Mysql,"#","\t""#"
OFS="\t";print "AVG>=",AVG_above_CN,AVG_above_Math,AVG_above_C,AVG_above_Mysql
OFS="\t";print "AVG<",AVG_below_CN,AVG_below_Math,AVG_below_C,AVG_below_Mysql
}
' $*[/code]
xueyuanxueyuan 于 2012-09-18 21:21:31发表:
大侠,泣血求助啊!!!请帮我写一个awk脚本,就是把两个数据文件里面近似相等的行挑出来并打印到指定的文件。举个例子:两个班上的学生,举行了一次考试,考试的科目数都相同(语文、数学、英语、物理),把某些特定的学生的成绩挑出来。要求是这些学生相同科目的成绩只相差2分(大家别嫌麻烦啊)。我给个例子:A班学生成绩用文件A表示,B班学生成绩用文件B表示,
文件A为:
语文 数学 英语 物理 姓名
95 94 93 92 张三
85 84 83 82 张四
75 74 73 72 张五
65 64 63 62 张六
文件B为:
99 90 97 98 李四
87 82 85 80 李五
80 70 63 82 李六
70 68 68 72 李七
实现这个算法有点麻烦,要循环比较两个文件里面每一个域的记录:第一个文件里面第一行的每列数字和第二个文件里面所有行的相应列做比较,第一个文件的第二列,第三列。。。。依次和第二个文件的所有行都比较,本人刚接触awk,觉得头都大了,拜托大侠相助,不胜感激!!!本人愿意付出一定报酬,QQ:114669870,邮箱:wangjt3235@yahoo.com.cn 。
sun82110 于 2011-09-15 00:49:55发表:
copy去研究下~
sun82110 于 2011-09-15 00:47:10发表:
看到awk就头大~
panaiec 于 2011-09-09 08:38:07发表:
向高手学习