Script de bash calculando a média dos salários

1

Se eu recebesse um arquivo com os salários dos funcionários.

A primeira linha no arquivo é:

num job id salary

Quando as palavras são separadas por espaços.

e o resto das linhas são assim:

1 engineer 034524566 8000 2 manager 122334455 15000 3 engineer 156254132 9000 4 student 142635472 5000

Eu preciso escrever um script que use esse arquivo como parâmetro e imprima a média dos salários. Por exemplo, dado o arquivo salaries acima, e escrevendo este comando /average salaries deve imprimir:

9250

O que eu fiz: eu escrevi um script de ajuda 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

Primeiro de tudo, eu não pulei a primeira linha que não é necessária. Alguma idéia de como? Em segundo lugar, sinto que há uma maneira muito mais simples, por isso, se alguém tiver alguma sugestão, eu agradeceria.

    
por Sijaan Hallak 08.03.2016 / 12:00

1 resposta

1

Usando grep , paste e 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 é inteligente o suficiente para descartar salary da adição.

    
por 08.03.2016 / 12:13

Tags