URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4295
[ Назад ]

Исходное сообщение
"Суммирование значений столбца в таблице  "

Отправлено SaneK , 24-Май-05 17:35 
День добрый!

Народ, никак не могу догнать как написать скрипт который бы делал следующее:

Имеется таблица(файл) вида:

Строка1 Строка2 Число1
Строка1 Строка2 Число2
Строка3 Строка2 Число3
Строка3 Строка4 Число4
Строка3 Строка2 Число5

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

Строка1 Строка2 Сумма(Число1+Число2)
Строка3 Строка2 Сумма(Число3+Число5)
Строка3 Строка2 Число4

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

Заранее благодарен!


Содержание

Сообщения в этом обсуждении
"Суммирование значений столбца в таблице  "
Отправлено Андрей , 24-Май-05 19:52 
примерно вот так получилось у меня.
таблица располагается в файле data.

for key in `awk '{printf("%s %s\n", $1, $2)}' data | sort | uniq`
do
    sum=""
    for num in `grep $key data | awk '{print $3}'`
    do
        sum="$sum+$num"
    done
    echo "$key сумма(${sum#+})"
done


"Суммирование значений столбца в таблице  "
Отправлено madskull , 24-Май-05 23:05 
>примерно вот так получилось у меня.
>таблица располагается в файле data.
>
>for key in `awk '{printf("%s %s\n", $1, $2)}' data | sort |
>uniq`
>do
>    sum=""
>    for num in `grep $key data | awk
>'{print $3}'`
>    do
>        sum="$sum+$num"
>    done
>    echo "$key сумма(${sum#+})"
>done

можно и так.
cat data | cut -d\  -f-2 | sort -u | while read k; do awk "BEGIN{S=0};/^$k/{S+=\$3};END{print \"$k\",S}" data;done

Есть подозрение, что можно все в awk запихнуть, но пиво мешает... :)


"Суммирование значений столбца в таблице  "
Отправлено madskull , 24-Май-05 23:51 

>Есть подозрение, что можно все в awk запихнуть, но пиво мешает... :)
>
можно:
awk '{k=$0;sub(/[ \t]+[0-9]+$/,"",k);s[k]+=$(NF)}END{for(k in s){print k,s[k]}}'  data
:)

"Суммирование значений столбца в таблице  "
Отправлено Андрей , 25-Май-05 16:52 
"Краткость - сестра таланта" (с) не помню
тем более что мой вариант требует установки IFS=перенос строки

>можно:
>awk '{k=$0;sub(/[ \t]+[0-9]+$/,"",k);s[k]+=$(NF)}END{for(k in s){print k,s[k]}}'  data
>:)