输入文件的每一行都有格式
[IDNum FirstName LastName test1Score test2Score test3Score......]
我需要按以下格式打印测试平均值:
Test1: test1Avg
Test2: test2Avg
Test3: test3Avg
.
.
.
我正在努力使测试平均值是唯一的(并非所有第一个测试的平均值)
我正在运行这个尴尬的语句,但它打印出(很明显的原因)test1 在所有测试中的平均值。
awk '{sum+=$4} END {for(i=4; i<=NF; i++) printf (Test%d %dn", i-3, sum/NR)}'
我需要在每次迭代中以某种方式将 4 美元增加到 5 美元,依此类推才能得到我想要的东西,尽管我不确定这是否可能。
这是很有可能的!
假设数字列从第 4 列开始并一直持续到最后一列,也假设此处存在标题行(不清楚是否是这种情况):
awk '
NR==1{
for( i=4;i<=NF;i++) {
header[i] = $i
};
}
NR>1{
for( i=4;i<=NF;i++) {
arr[i] += $i
};
}
END{
print "column","avg";
for( i=4;i<=NF;i++) {
print header[i],arr[i]/(NR-1)
};
}' data.txt
示例输入:
IDNum FirstName LastName test1Score test2Score test3Score
1 bob jones 1 2 3
2 jill jones 2 4 6
示例输出:
column avg
test1Score 1.5
test2Score 3
test3Score 4.5
使用 perl:
perl -lane 'if($.==1)
{
@a=@F[2..(scalar(@F)-1)]
}
else
{
@a = map { $a[$_] + $F[$_+2] } 0..$#a;
}
END{for($i=0;$i<scalar(@a);$i++ ){print "Test".($i+1).":".$a[$i]/$.}}' your_file
在这里测试
您可以使用:
awk 'NF>3 {for(i=4; i<=NF; i++) a[i]+=$i}
END { for(i=4; i<=NF; i++) printf "Test%d %.2fn", (i-3), (a[i]/NR)}'