
従業員の給与を含む文書を与える。
ファイルの最初の行は次のようになります。
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
加算を捨てるほどスマートです。