среднее значение по n строк вместе - PullRequest
2 голосов
/ 24 февраля 2012

Мне нужно вычислить среднее значение всех столбцов только по трем строкам, например

0.9 0.7 4.1             12.0
0.9 0.7 4.1             12.5
0.8 0.7 4.1             12.4
0.7 0.3 4.1             11.2
0.7 0.3 4.1             11.2
0.8 0.3 4.0             11.1

Так что я должен получить только две строки, т.е.

0.86 0.7 4.1 12.3
0.73 0.3 4.03 11.16

Может кто-нибудь написать мне простой скрипт для этого?

Ответы [ 2 ]

1 голос
/ 24 февраля 2012
here is an awk script for you dear.

BEGIN{
FS=" ";
N=3;
sum1=0;sum2=0;sum3=0;sum4=0;count=1;
}
{
 if(count%N != 0 )
 {
  count++;
  sum1 = sum1 + $1;
  sum2 = sum2 + $2;
  sum3 = sum3 + $3;
  sum4 = sum4 + $4;
 }
 else
 {
  sum1 = sum1 + $1;
  sum2 = sum2 + $2;
  sum3 = sum3 + $3;
  sum4 = sum4 + $4;
  printf("%f %f %f %f\n",sum1/N,sum2/N,sum3/N,sum4/N);
  sum1=0;sum2=0;sum3=0;sum4=0;count=1;
 }
}
END{
}

надеюсь, это поможет вам. запустите его как:

awk -f <name of this awk script> <your input text file>

потому что, если ваш текстовый файл содержит x строк ввода, где x не является миллиардом N, то ваши строки x% N будут пропущены из вашего вывода. Вышеприведенный скрипт даст частичный результат, но исправит, что ни одна из строк в текстовом файле не кратна N. Чтобы справиться с этим, вы можете добавить следующие строки в разделе END скрипта.

END{
count-=1;
if(count!=0)
{
printf("Last 'x'=%d lines in the text file such that x <     N\n",count);
printf("%f %f %f     %f\n",sum1/count,sum2/count,sum3/count,sum4/count);
}
}
0 голосов
/ 24 февраля 2012

Это может работать для вас: (GNU awk?)

 awk -vCONVFMT='%2.2f' '{a+=$1;b+=$2;c+=$3;d+=$4}!(NR%3){$1=a/3;$2=b/3;$3=c/3;$4=d/3;a=b=c=d=0;print}' file
0.87 0.70 4.10 12.30
0.73 0.30 4.07 11.17
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...