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

Исходное сообщение
"Обработка текстовых файлов"

Отправлено wattonen , 22-Мрт-07 17:38 
есть файл следующего содержания:
973983 192.168.10.101
972554 192.168.10.16
954002 192.168.10.87
929206 192.168.10.24
928921 192.168.10.89
900988 192.168.10.89
900336 192.168.10.24
900064 192.168.10.24
899915 192.168.10.89
898429 192.168.10.89
851817 192.168.10.89
837050 192.168.10.89
832832 192.168.10.101
822806 192.168.10.89
822778 192.168.10.89

Мне надо сделать так называемое сворачивание таблицы, т.е. получить во втором столбце уникальные айпи-адреса, а в первом - их суммарные значения.  Интересует решения с использованием sed'a, awk'a, етц.


Содержание

Сообщения в этом обсуждении
"Обработка текстовых файлов"
Отправлено newser , 22-Мрт-07 18:05 
>есть файл следующего содержания:
>973983 192.168.10.101
>972554 192.168.10.16
>954002 192.168.10.87
>929206 192.168.10.24
>928921 192.168.10.89
>900988 192.168.10.89
>900336 192.168.10.24
>900064 192.168.10.24
>899915 192.168.10.89
>898429 192.168.10.89
>851817 192.168.10.89
>837050 192.168.10.89
>832832 192.168.10.101
>822806 192.168.10.89
>822778 192.168.10.89
>
>Мне надо сделать так называемое сворачивание таблицы, т.е. получить во втором столбце
>уникальные айпи-адреса, а в первом - их суммарные значения.  Интересует
>решения с использованием sed'a, awk'a, етц.

С помощью sed навряд ли, а в awk используйте ассоциативные массивы.


"Обработка текстовых файлов"
Отправлено xan , 22-Мрт-07 23:55 
>>... а в awk используйте ассоциативные массивы.
Sure, you can. However:
cat a.txt | sort -k 2 | awk 'BEGIN{Count=0; Addr="BLEEP"} {if (Addr==$2) {Count+=$1;} else {printf "%d %s\n",Count, Addr; Count=$1;Addr=$2;}} END{printf "%d %s\n",Count, Addr;} ' | grep -v BLEEP
works just fine , providing that a.txt is input file with statistics. Have no idea how to avoid BLEEP though.