2016-12-25 154 views
2

我有一個文件名爲「標記」用指的是學生的名字,姓氏和類4標記線的平均他把這個學期的每一行是這樣的:awk中:打印每一行

John McJohn 56 68 31 99 
Ronald McDonald 89 89 60 75 
Boaty McBoatface 50 50 50 50 

我嘗試創建一個awk腳本,每行打印每行(每個學生)的平均分數和他所在的行數。

f.e.

Student 1, John McJohn, 63,5 
Student 2, Ronald McDonald, 78.25 

等等。

我想出什麼樣的主意是:

{ 
    for(i=0; i<FNR; i++) 
    { 
     avg=($3+$4+$5+$6)/4; 
     printf("Student %d, %s %s, %.2f\n", i, $1, $2, avg); 
    } 
} 

但是這個輸出是這似乎是一個笛卡爾積一團糟:

enter image description here

我懷疑有i<FNR表達式令每個循環的線條都顯得有些不妥。

它應該怎麼樣?

+0

我認爲你的意思是'%.2f',而不是$符號 – user2314737

+1

你不必循環。 awk會爲你循環遍歷每一行。這樣的東西就足夠了:'awk'{print'Student'NR',',$ 1 $ 2「,」,($ 3 + $ 4 + $ 5 + $ 6)/ 4}'yourfile'。 –

+0

@ user2314737這是一個錯字,我現在正在編輯它。 – Coursal

回答

2

如果學生的名字都在文件中唯一不需要的for

avg=($3+$4+$5+$6)/4; 
printf("Student %d, %s %s, %.2f\n", NR, $1, $2, avg); 

在那裏你可以使用一個for循環是計算的總和(這可能是如果你有方便超過4個字段添加):

for (i=3;i<7;i++) avg+=$i; 
avg=avg/4; 
printf("Student %d, %s %s, %.2f\n", NR, $1, $2, avg)}