The OpenNET Project / Index page

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

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

"Суммирование значений столбца в таблице  " 
Сообщение от SaneK emailИскать по авторуВ закладки(??) on 24-Май-05, 17:35  (MSK)
День добрый!

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

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

Строка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+что то еще...

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

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

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Суммирование значений столбца в таблице  " 
Сообщение от Андрей Искать по авторуВ закладки(??) on 24-Май-05, 19:52  (MSK)
примерно вот так получилось у меня.
таблица располагается в файле 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

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

2. "Суммирование значений столбца в таблице  " 
Сообщение от madskull Искать по авторуВ закладки(ok) on 24-Май-05, 23:05  (MSK)
>примерно вот так получилось у меня.
>таблица располагается в файле 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 запихнуть, но пиво мешает... :)

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

3. "Суммирование значений столбца в таблице  " 
Сообщение от madskull Искать по авторуВ закладки(ok) on 24-Май-05, 23:51  (MSK)

>Есть подозрение, что можно все в awk запихнуть, но пиво мешает... :)
>
можно:
awk '{k=$0;sub(/[ \t]+[0-9]+$/,"",k);s[k]+=$(NF)}END{for(k in s){print k,s[k]}}'  data
:)
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

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

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


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


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

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




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

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