我无法找到每列每6行间隔的平均值。这与我之前的帖子有关。我有一个数字列的数据(这里是2)
equals
我想使用awk
main
以上适用于第1栏。所以我可以为第二列替换$ 1到$ 2。但我想在同一个命令中做到这一点。这是我无法做到的。
期望的输出:
input.txt
1 3
4 7
30 //
// 3
10 3
40 1
// 90
// 22
// 11
// //
// //
// //
17是(1 + 4 + 30 + 10 + 40)/ 5; 0是因为没有整数和所有缺失值; 3.4是(3 + 7 + 3 + 3 + 1)/ 5; 41是(90 + 22 + 11)/ 3
答案 0 :(得分:1)
我认为你应该单独对每一栏进行总结。尝试:
awk '{if($1!="//"){sum1+=$1;count1++;}; if($2!="//"){sum2+=$2;count2++;}}NR%6==0{print count1 ? sum1/count1:0, count2 ? sum2/count2:0;sum1=sum2=count1=count2=0;}' input.txt
[UPDATE:]
如果要计算两个以上的列,则可以使用数组并每次遍历所有列。
awk '{
for(i=1;i<=NF;++i){
if($i!="//"){
sum[i]+=$i;
count[i]++
}
}}
NR%6==0{
for(i in sum)
{
avg=count[i]?sum[i]/count[i]:0;
printf("%.2f ",avg);
sum[i]=0;
count[i]=0
}
printf("\n")
}'
input.txt