Awk 计算平均值并将其写入其他文件
我有一份有ID和分数的学生名单,我需要用他们的平均分数再做一份。主要清单: 姓名学生索引课程组讲师id名单分数 阿索斯火枪手13,4,5,3.5 波托斯火枪手2 1 2,5,3.5 阿拉米斯火枪手3,2,1,4,5 我有这个剧本 awk“{n=split$6,a,;total=0;对于total中的v+=a[v];print total/n}”主列表 但我不想打印它,我想把它写在另一个叫做“平均分数”的文件中。最终内容应如下所示,平均值列表: 阿索斯火枪手13.875 波托斯火枪手2113.5 阿拉米斯火枪手3Awk 计算平均值并将其写入其他文件,awk,Awk,我有一份有ID和分数的学生名单,我需要用他们的平均分数再做一份。主要清单: 姓名学生索引课程组讲师id名单分数 阿索斯火枪手13,4,5,3.5 波托斯火枪手2 1 2,5,3.5 阿拉米斯火枪手3,2,1,4,5 我有这个剧本 awk“{n=split$6,a,;total=0;对于total中的v+=a[v];print total/n}”主列表 但我不想打印它,我想把它写在另一个叫做“平均分数”的文件中。最终内容应如下所示,平均值列表: 阿索斯火枪手13.875 波托斯火枪手2113.5
你能试一下吗
while read first second third fourth fifth sixth
do
if [[ "$first" =~ (^#) ]]
then
continue
fi
count="${sixth//[^,]}"
val=$(echo "(${#count}+1)" | bc)
new_val=$(echo "scale=2; (${sixth//,/+})/$val" | bc)
echo "$first $second $third $fourth $fifth $new_val"
done < "Input_file" > "Output_file"
使用awk:
awk '{n=split($NF,array,","); NF--; sum=0; for(i=1; i<=n; i++){sum+=array[i]} print $0,sum/n}' file
请参阅:欢迎使用SO,找个时间给出答案,当您对问题有了一些答案时,您可以从中选择一个正确的答案。@GarciSan,意思是删除任何在bash中被视为注释的开头行。这很有效!我试过awk的第二个,非常感谢!
awk '{n=split($NF,array,","); NF--; sum=0; for(i=1; i<=n; i++){sum+=array[i]} print $0,sum/n}' file
athos musketeer 1 1 1 3.875
porthos musketeer 2 1 1 3.5
aramis musketeer 3 2 2 3