如果给我一份包含员工工资的文件。
文件中的第一行是:
num job id salary
当单词之间用空格分隔时。
其余的行是这样的:
1 engineer 034524566 8000 2 manager 122334455 15000 3 engineer 156254132 9000 4 student 142635472 5000
我需要编写一个脚本,将此文件作为参数并打印工资平均值。例如,给定salaries
上述文件,并输入此命令/average salaries
应该打印:
9250
我做了什么:我写了一个帮助脚本calc
:
#calc "$1"
(( a=0 ))
(( sum=0 ))
while read line; do
(( value = `cut -d" " -f5 $line ))
(( sum = $sum + $value+0 ))
(( value = 0 ))
done
echo (( sum/a ))
#average $1
cat $1 | calc
首先,我没有跳过不需要的第一行。有什么想法吗?其次,我觉得有一种更简单的方法,所以如果有人有任何建议,我将不胜感激。
答案1
使用grep
,paste
和bc
:
% count="$(tail -n 1 salary.txt | grep -o '^[^\s]\+')"
% echo "$count"
4
% salary="$(grep -o '[^ ]\+$' salary.txt | paste -sd+)"
% echo "$salary"
salary+8000+15000+9000+5000
% echo "($salary)/$count" | bc
9250
bc
足够聪明,可以salary
从加法中丢弃。