难以定义条件来调用某些功能和错误消息

时间:2018-07-08 03:45:14

标签: bash shell unix vi

我正在编写一段代码,该代码将使用我已经制成的文件中的数据,以便计算出文件的平均值,最小值,最大值,然后最终一次显示所有值。
我对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"
}

谢谢!

1 个答案:

答案 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

请注意,尽管此处或代码中的平均值是使用整数数学计算的,所以您会丢失所有小数。