我正在编写一段代码,该代码将使用我已经制成的文件中的数据,以便计算出文件的平均值,最小值,最大值,然后最终一次显示所有值。
我对Unix还是很陌生,所以我想尝试学习它,但是我似乎无法破解我需要使用我的代码以便使其获得功能的地方。
我已经掌握了代码的基础知识,但是我需要找到一种使用年份调用函数的方法,该年份存储在与该年份相对应的目录中,这让我觉得我从文件调用时会遇到问题因为我使用sed函数仅占用该文件的第4行而不是年份。
如果还没有指出错误信息和状态,我还需要弄清楚如何设置脚本的错误消息和状态(年份)(4个命令之一),年份不对应树中可用的年份并且关键字无效。 />
任何帮助甚至指向学习这些东西的好材料的指针都将是很棒的。
这是我当前的代码:
#!/bin/bash
#getalldata() {
#find . -name "ff_*" -exec sed -n '4p' {} \;
#}
#Defining where the population configuration file is which contains all the data
popconfile.txt=$HOME/testarea
#Function to find the average population of all of the files
averagePopulation()
{
total=0
list=$(cat popconfile.txt)
for var in "${list[@]}"
do
total=$((total + var))
done
average=$((total/$(wc -l popconfile.txt)))
echo "$average"
}
#Function to find the maximum population from all the files
maximumPopulation()
{
max=1
for in `cat popconfile.txt`
do
if [[ $1 > "$max" ]]; then
max=$1
echo "$max"
fi
done
}
#Function to find the minimum population from all the files
minimumPopulation()
{
min=1000000
for in `cat popconfile.txt`
do
if [[ $1 < "$min" ]]; then
max=$1
echo "$min"
fi
done
}
#Function to show all of the results in one place
function showAll()
{
echo "$min"
echo "$max"
echo "$average"
}
谢谢!
答案 0 :(得分:0)
假设您的popconfile.txt格式为
cat popconfile.txt
150
10
45
1000
34
87
您可以使用:
来简化代码 for i in $(cat popconfile.txt);do
temp[$i]=$i
done
pop=(${temp[*]})
min=${pop[0]}
max=${pop[$((${#pop[*]}-1))]}
for ((j=0;j<${#pop[*]};j++));do
sum=$(($sum+${pop[$j]}))
done
average=$(($sum/${#pop[*]}))
echo "maximum="$max
echo "minimum="$min
echo "average="$average
请注意,尽管此处或代码中的平均值是使用整数数学计算的,所以您会丢失所有小数。