The OpenNET Project / Index page

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

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

"Вывод по шаблону"  +/
Сообщение от MRDK (ok) on 12-Июл-17, 12:58 
Помогите пожалуйста, не могу разобраться, как вывести данные по шаблону.
Дано:
после применения  awk -F ',' '{print $1}' имеется поток данных вида
17071210.log:31:51.761007
17071210.log:31:51.761011
17071210.log:31:51.761013
17071210.log:31:51.761016
17071210.log:31:51.761020
17071210.log:31:51.761022
17071210.log:31:51.761026
(год+месяц+день+час.log:мин:сек.мс)
Надо преобразовать в формат час:мин
регулярка для этого (\d\d(?=\.log\:)).*((?<=\.log\:)\d\d)
где у нас в первой переменной окажется час, во второй - минуты.
Как это вывести на экран?
Шаблон sed 's/.*/регулярка/' выводит не результат работы, а само выражение
Ответить | Правка | Cообщить модератору

Оглавление

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


1. "Вывод по шаблону"  +/
Сообщение от Andrey Mitrofanov on 12-Июл-17, 13:46 
> Дано:
> после применения  awk -F ',' '{print $1}' имеется поток данных вида
> 17071210.log:31:51.761007
> где у нас в первой переменной окажется час, во второй - минуты.
> Как это вывести на экран?

$ echo '17071210.log:31:51.761007,a,b,c' |awk -F ',' '{print $1}'
17071210.log:31:51.761007
$ echo '17071210.log:31:51.761007,a,b,c' |gawk -F ',' 'match($1,"([0-9][0-9])\\.log:([0-9][0-9])",aa){print aa[1],aa[2]}'
10 31
$ _

> Шаблон sed 's/.*/регулярка/' выводит

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Вывод по шаблону"  +/
Сообщение от MRDK (ok) on 12-Июл-17, 14:16 
>[оверквотинг удален]
>> 17071210.log:31:51.761007
>> где у нас в первой переменной окажется час, во второй - минуты.
>> Как это вывести на экран?
> $ echo '17071210.log:31:51.761007,a,b,c' |awk -F ',' '{print $1}'
> 17071210.log:31:51.761007
> $ echo '17071210.log:31:51.761007,a,b,c' |gawk -F ',' 'match($1,"([0-9][0-9])\\.log:([0-9][0-9])",aa){print
> aa[1],aa[2]}'
> 10 31
> $ _
>> Шаблон sed 's/.*/регулярка/' выводит

спасибо

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Вывод по шаблону"  +/
Сообщение от _ (??) on 12-Июл-17, 17:25 
echo '17071210.log:31:51.761007,a,b,c' |sed 's/^.*\([0-9][0-9]\)\.log:\([0-9][0-9]\).*$/\1 \2/'
10 31
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Вывод по шаблону"  +/
Сообщение от михалыч (ok) on 12-Июл-17, 19:45 
> 17071210.log:31:51.761022
> 17071210.log:31:51.761026
> (год+месяц+день+час.log:мин:сек.мс)
> Надо преобразовать в формат час:мин
> регулярка для этого (\d\d(?=\.log\:)).*((?<=\.log\:)\d\d)
> где у нас в первой переменной окажется час, во второй - минуты.
> Как это вывести на экран?

Это perl
если уж с заглядыванием вперед и назад - то чуть рихтануть

echo 17071210.log:31:51.761007 | perl -pe 's/.*(\d\d)(?:(?=\.log\:)).*(?:(?<=\.log\:))(\d\d).*/$1:$2/'

но лучше как на sed уже показали
echo 17071210.log:31:51.761007 | perl -pe 's/.*(\d\d)\.log\:(\d\d).*/$1:$2/'

так как-то короче, да и понятнее, а то куча вопросительных знаков воспринимается плохо
и порождает дополнительные вопросы (мля, каламбурчик ))

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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



  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor