2013-04-24 71 views
0

我有一個名爲平均值:「冬天」巫婆每行包含一個學生的名字和他的成績在他的冬季總決賽平均:使用外殼來計算學生

John 4 
Brian 8.5 

稱爲另一個文件:'夏季」包含了他的夏季總決賽在每行一個學生的名字和5個等級:

John 8 7 9 4 7 
Brian 10 9 4 5 8 

我要計算每個學生每年的平均品位:

John ((8+7+9+4+7)/5 + 4)/2 
Brian ((10+9+4+5+8)/5 + 8.5)/2 

輸出結果將按年平均值排序,所以成績最高的學生排在第一位。

我想用shell編程來完成這個任務。

我試着計算用awk平均:

awk '{print $1 " " ($2 + $3 + $4 + $5 + $6)/5}' summer 

但我不知道如何繼續,甚至如何下手。

回答

1

這裏有一個辦法:

$ awk 'FNR==NR{a[$1]=$2;next}{print $1,(a[$1]+($2+$3+$4+$5+$6)/5)/2}' winter summer | sort -rnk2 
Brian 7.85 
John 5.5 

說明:

,當我們在第一個文件winter所以塊爲該文件執行的條件FNR==NR是唯一的真實。該塊簡單地創建一個數組,其中學生姓名是鍵,分數是值。 next語句跳轉到文件中的下一行。當我們在第二個文件中時,腳本與您的腳本非常相似,但是我們使用該數組從第一個文件中獲取分數。排序很簡單-r反向-n數字排序在第二個字段-k2

應該指出,這個腳本假設沒有兩個學生有相同的名字。

+1

謝謝sudo_O,感謝您的幫助。 – 2013-04-24 20:14:35