The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"суммирование полей записей"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"суммирование полей записей"  
Сообщение от dem on 27-Окт-06, 23:03 
сущеествет файл с такими записями, например
123 39  223 440
123 39  40  41
123 39  201 900
710 222 2   45
710 222 611 33
710 222 21  309

на выходе надо получить, в данном случае две записи -- где первые два поля одинаковы, а третье и четвёртое просуммированы, т.е.:
123 39  223+40+201 440+41+900
710 222 2+611+21 45+33+309
суммирование по 1-му полю понятно, а по двум не допру
можно на awk,perl или shell

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "суммирование полей записей"  
Сообщение от pup (ok) on 27-Окт-06, 23:51 
#!/bin/awk

{
  first = $1; second = $2;
  if (step == 0) {
     third = $3;
     fourth = $4;
     step ++;
  } else {
     third += $3;
     fourth += $4;
     if (step == 2) {
         step = 0;
         printf "%d %d %d %d\n", first, second, third, fourth;
     } else
         step ++;
  }
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "суммирование полей записей"  
Сообщение от dem on 28-Окт-06, 22:54 
>#!/bin/awk
>
>{
>  first = $1; second = $2;
>  if (step == 0) {
>     third = $3;
>     fourth = $4;
>     step ++;
>  } else {
>     third += $3;
>     fourth += $4;
>     if (step == 2) {
>         step = 0;
>
>         printf "%d %d
>%d %d\n", first, second, third, fourth;
>     } else
>         step ++;
>  }
>}
спасибо, но это я только показал как пример. записей может быть и тысяча, притом две записи с одними одинаковыми полями(1-е,2-е), ещё 120 с другим, а остальные 878 с третьими.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "суммирование полей записей"  
Сообщение от alexvs (??) on 29-Окт-06, 23:01 
#more 1.txt
123 39  223 440
123 39  40  41
123 39  201 900 232
710 222 2   45 234 2345
710 222 611 33 234 23
710 222 21  309 5 234 234 234 234

#cat 1.txt | perl -e 'my %hs; while(<>) {my @mass=split/\s/; my $key = (shift @mass)." ".(shift @mass); foreach my $val (@mass) {$hs{$key}+=$val;}} foreach my $val (sort keys %hs) {print "$val $hs{$val}\n";}'


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру