Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: awk pcre, group by  (Прочитано 12009 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 12-09-2007 10:39 » 

нехватает реализации в гавк:
pcre: backreferences, minimal match

что проще:
- поискать другую авк
- попытаться присоединить библиотеку pcre
- повторить и перейти на перл?
« Последнее редактирование: 13-09-2007 17:27 от Mayor » Записан

1n c0de we trust
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 13-09-2007 16:47 » 

Перейти на Perl.

Я сперва awk изучил. Когда на нем пришлось писать не простые фильтры, а более сложные парсеры для большого объема текста, то он показал малую гибкость языка и очень медленную работу. Переписав все это на perl (я его тогда только начал изучать) я получил увеличение сколости раз в 20 и несравненно более гибкий и удобный инструмент.

Для автоматизации перехода в комплекте с perl идет утилита a2pl - конвертор из awk в perl. 100% работоспособности он не даст, но простые фильтры легко переводит.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #2 : 13-09-2007 17:28 » 

пока времени на изучение перла нету Жаль

как на авк реализовать агрегатную функцию по регулярному выражению?

например есть таблица вида:
Код:
20070113\t12
20070216\t60
20070217\t70
20070310\t80
и тд

нада сложить 2 поле по месяцам:
01 = 12
02 = 130
03 = 80
и тд
Записан

1n c0de we trust
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 13-09-2007 18:25 » 

Извиняюсь за посыл на RTFM...
Посмотри в мане на awk блоки BEGIN и END, массивы, ф-ии (substr).

Если год может меняться, то в "месяц" стоит включить первые шесть цифр.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #4 : 14-09-2007 15:22 » 

Извиняюсь за посыл на RTFM...
Посмотри в мане на awk блоки BEGIN и END, массивы, ф-ии (substr).

Если год может меняться, то в "месяц" стоит включить первые шесть цифр.

не год просто для примера, мне нада как-то приравнять переменую к значению /lsdjkf(sldkf)sdflk/    \1   -- полученному внутри скобок

потом то будет элементарно выполнить агрегатную функцию над ассоцированным списком
Записан

1n c0de we trust
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 17-09-2007 17:26 » 

Код: (awk)
/^[0-9]{6}[ \t][0-9]+/ { print substr($1, 5, 2) " = " $2; }
Для работы квантификатора {} нужно запускать awk параметром --posix.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #6 : 18-09-2007 05:20 » 

Код: (awk)
/^[0-9]{6}[ \t][0-9]+/ { print substr($1, 5, 2) " = " $2; }
Для работы квантификатора {} нужно запускать awk параметром --posix.

а как сделать в actions  regexp backreference?

Записан

1n c0de we trust
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 18-09-2007 18:26 » 

Похоже, что awk их не поддерживает - в мане нет упоминаний - у него это просто группировка.
Для таких простых вещей вполне подойдет sed.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #8 : 23-09-2007 07:17 » new

Код:
BEGIN { FS = "\t" }

{
  month = substr($1, 5, 2) # substr($1, 1, 6) если надо учесть и год
  sum[month] += $2
}

END {
  OFS = "\t"
  for (month in sum)
    print month, sum[month] | "sort"
}

Записан

1n c0de we trust
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines