The OpenNET Project / Index page

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

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

"Суммирование значений столбца и среднее арифметическое"  
Сообщение от visitor (ok) on 03-Апр-09, 21:15 
Здравствуйте.
Ребята никак не получается написать скрипт, помогите плиз.

Имею таблицу:
STRING-001,63,8,54
STRING-001,11,3,6
STRING-001,11,3,4
STRING-001,50,13,31
STRING-003,3,2,11
STRING-003,3,2,1
STRING-004,3,2,4
STRING-004,3,2,2
STRING-004,2,2,3
STRING-004,3,2,6
STRING-004,1,1,8

Необходимо просуммировать значения 2-го, 3-го, 4-го столбца с вычислением их средне-арифметического значения. На выходе нужно иметь:

STRING-001 33,75 6,75 23,75
STRING-003 3 2 6
STRING-004 2,4 1,8 4,8

Буду признателен подсказке по реализации любыми средствами кроме SQL, но лучше на sh+awk+sed

Заранее спасибо.

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

 Оглавление

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


1. "Суммирование значений столбца и среднее арифметическое"  
Сообщение от NuINu (??) on 03-Апр-09, 22:07 
>[оверквотинг удален]
>На выходе нужно иметь:
>
>STRING-001 33,75 6,75 23,75
>STRING-003 3 2 6
>STRING-004 2,4 1,8 4,8
>
>Буду признателен подсказке по реализации любыми средствами кроме SQL, но лучше на
>sh+awk+sed
>
>Заранее спасибо.

Вот как бы сделал я
#!/usr/bin/perl -w

use strict;

my %stat;
while(<DATA>) {
    chomp;
    my @tmp = split(/,/, $_);
    if(!defined($stat{$tmp[0]})) {
    $stat{$tmp[0]} = [0, 0, 0, 0];    #формат: количество элементов, сумма 1 столбца, сумма 2, сумма 3
    }
    $stat{$tmp[0]}->[0] += 1;
    foreach my $i (1..3) {
    $stat{$tmp[0]}->[$i] += $tmp[$i];
    }
}


    #Результ
foreach my $k (sort keys(%stat)) {
    print "$k ";
    foreach my $i (1..3) {
    print $stat{$k}->[$i]/$stat{$k}->[0], " ";
    }
    print "\n";

}

__DATA__
STRING-001,63,8,54
STRING-001,11,3,6
STRING-001,11,3,4
STRING-001,50,13,31
STRING-003,3,2,11
STRING-003,3,2,1
STRING-004,3,2,4
STRING-004,3,2,2
STRING-004,2,2,3
STRING-004,3,2,6
STRING-004,1,1,8

но если ты желаешь исполнить это на седе шеле и авке то тебе придеться поискать кого нибудь другого или сделать это самому.

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

2. "Суммирование значений столбца и среднее арифметическое"  
Сообщение от visitor (ok) on 03-Апр-09, 22:15 
спасибо большое.
но все таки хочется на седе и авке :)
там не будет таких громоздких циклов
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Суммирование значений столбца и среднее арифметическое"  
Сообщение от angra (ok) on 04-Апр-09, 00:28 
Какие мы привередливые. Вот вам вариант без громоздких циклов.
perl -F, -ane '$h{$F[0]}->[$_]+=$F[$_] for 1..3;$h{$F[0]}->[0]++;END{for $k(sort keys %h) {print "$k";print " ".($h{$k}->[$_]/$h{$k}->[0]) for 1..3;print "\n";}}'
Можно сделать еще компактней. На awk будет выглядеть похоже.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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