0

'winter' witch という名前のファイルがあり、各行に生徒の名前と冬の決勝での成績の平均が含まれています。

John 4
Brian 8.5

'summer' という名前の別のファイルには、各行に生徒の名前と夏の決勝の 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

出力は年間平均でソートされるため、成績が最も高い学生が最初になります。

シェルプログラミングを使用してこれを実行したいと考えています。

awkを使用して平均を計算してみました:

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

しかし、どのように継続するか、またはどのように開始するかさえわかりません。

4

1 に答える 1

1

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

説明:

条件FNR==NRは、最初のファイルにいる場合にのみ真であるwinterため、ブロックはそのファイルに対してのみ実行されます。このブロックは、学生の名前がキーで成績が値である配列を作成するだけです。ステートメントは、ファイル内のnext次の行にジャンプします。2 番目のファイルにいる場合、スクリプトはあなたのものとほとんど同じですが、配列を使用して最初のファイルから成績を取得します。ソートは、2 番目のフィールドでの単純な-r逆数値ソートです。-n-k2

このスクリプトは、2 人の生徒が同じ名前を持っていないことを前提としていることに注意してください。

于 2013-04-24T20:06:40.283 に答える