The OpenNET Project / Index page

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

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

"как sed или awk отрезать символы в поле"
Сообщение от Linuxadmin emailИскать по авторуВ закладки on 12-Май-04, 10:08  (MSK)
Добрый день всем.
У меня ведутся логи проходящего траффика с помощью tehtereal.
Tethereal запущен с ключом -t ad, то есть в лог он выдает дату и время.
При этом время идет с милисекундами, т.е. получается поле вида 10:25:47.123456
Потом этот лог загоняется при помощи mysql - клиента соответственно на mysql - сервер. Почему-то в процессе добавления строк в таблицу иногда в поле времени вместо 10:25:47 попадает 12:34:56 т.е. милисекунды (тип данных в данном поле таблицы стоит - time).
Как бы мне обработать лог - удалить из второго поля лог файла милисекунды и точку? Или удалить из поля все символы по шаблону (то есть все символы после точки вместе с точкой)?
Заранее благодарен.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "как sed или awk отрезать символы в поле"
Сообщение от temny emailИскать по авторуВ закладки(ok) on 12-Май-04, 10:24  (MSK)
echo 10:25:47.123456 | sed -e s/\\.[0-9]\\{6\\}//
echo 10:25:47.123456 | awk '{split($1,a,"."); print a[1] }'
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "как sed или awk отрезать символы в поле"
Сообщение от LinuxAdmin Искать по авторуВ закладки on 12-Май-04, 10:52  (MSK)
>echo 10:25:47.123456 | sed -e s/\\.[0-9]\\{6\\}//
>echo 10:25:47.123456 | awk '{split($1,a,"."); print a[1] }'

А как целиком файл скормить?
Поле в файле второе, поля разделены пробелом.
В принципе я проблему решил проще - с помощью команды cut.
Но для развития интересно посмотреть и на sed/awk

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "как sed или awk отрезать символы в поле"
Сообщение от temny emailИскать по авторуВ закладки(ok) on 12-Май-04, 11:01  (MSK)
>>echo 10:25:47.123456 | sed -e s/\\.[0-9]\\{6\\}//
>>echo 10:25:47.123456 | awk '{split($1,a,"."); print a[1] }'
>
>А как целиком файл скормить?
>Поле в файле второе, поля разделены пробелом.
>В принципе я проблему решил проще - с помощью команды cut.
>Но для развития интересно посмотреть и на sed/awk

В случае, если в других полях отсутствуют записи типа "точка-шесть цифр", то так:
cat file| sed -e s/\\.[0-9]\\{6\\}//

С авком в общем случае получается сложнее, но, если записи "точка-шесть цифр" встречаются в других полях, то это более простое решение, т.к. работаем только с одним полем.
Допустим $2 - номер поля (второе), всего полей три
cat file|awk '{split($2,a,"."); printf "%s %s %s\n",$1,a[1],$3}'

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "как sed или awk отрезать символы в поле"
Сообщение от LinuxAdmin Искать по авторуВ закладки on 12-Май-04, 11:08  (MSK)
>>>echo 10:25:47.123456 | sed -e s/\\.[0-9]\\{6\\}//
>>>echo 10:25:47.123456 | awk '{split($1,a,"."); print a[1] }'
>>
>>А как целиком файл скормить?
>>Поле в файле второе, поля разделены пробелом.
>>В принципе я проблему решил проще - с помощью команды cut.
>>Но для развития интересно посмотреть и на sed/awk
>
>В случае, если в других полях отсутствуют записи типа "точка-шесть цифер", то
>так:
>cat file| sed -e s/\\.[0-9]\\{6\\}//
>
>С авком в общем случае получается сложнее, но, если записи "точка-шесть цифер"
>встречаются в других полях, то это более простое решение.
>Допустим $2 - номер поля (второе), всего полей три
>cat file|awk '{split($2,a,"."); printf "%s %s %s\n",$1,a[1],$3}'

Это все классно, но если количество полей неизвестно и в любом из них может встречаться точка?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "как sed или awk отрезать символы в поле"
Сообщение от temny emailИскать по авторуВ закладки(ok) on 12-Май-04, 11:24  (MSK)
>Это все классно, но если количество полей неизвестно и в любом из
>них может встречаться точка?
Sed из предыдущего ответа так и работает
cat file | sed -e s/\\.[0-9]\\{6\\}//


Кол-во полей - любое.
Точка - в любом месте в любом кол-ве.
Убиваем первую попавшуюся запись "точка-шесть цифр" в каждой строке.

cat file | awk '{split($0,a,"\\.[0-9][0-9][0-9][0-9][0-9][0-9]"); printf "%s%s\n",a[1],a[2]}'

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "как sed или awk отрезать символы в поле"
Сообщение от Linuxadmin emailИскать по авторуВ закладки on 12-Май-04, 12:14  (MSK)
>>Это все классно, но если количество полей неизвестно и в любом из
>>них может встречаться точка?
>Sed из предыдущего ответа так и работает
>cat file | sed -e s/\\.[0-9]\\{6\\}//
>
>
>Кол-во полей - любое.
>Точка - в любом месте в любом кол-ве.
>Убиваем первую попавшуюся запись "точка-шесть цифр" в каждой строке.
>
>cat file | awk '{split($0,a,"\\.[0-9][0-9][0-9][0-9][0-9][0-9]"); printf "%s%s\n",a[1],a[2]}'

В данном случае результатом является только время, а остальные поля лог-файла теряются.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "как sed или awk отрезать символы в поле"
Сообщение от temny emailИскать по авторуВ закладки(ok) on 12-Май-04, 12:20  (MSK)
>В данном случае результатом является только время, а остальные поля лог-файла теряются.

Чем ты пользуешься - sed или awk? + Кинь кусок лога

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "как sed или awk отрезать символы в поле"
Сообщение от Linuxadmin emailИскать по авторуВ закладки on 12-Май-04, 12:26  (MSK)
>>В данном случае результатом является только время, а остальные поля лог-файла теряются.
>
>Чем ты пользуешься - sed или awk? + Кинь кусок лога

пользуюсь awk
Вот кусман лога:

2004-05-12 09:17:13.848405 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
2004-05-12 09:17:14.583898 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
2004-05-12 09:17:15.334067 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
2004-05-12 09:17:16.084230 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "как sed или awk отрезать символы в поле"
Сообщение от temny emailИскать по авторуВ закладки(ok) on 12-Май-04, 12:36  (MSK)
Хм... а у меня работает:
bash-2.05b$ cat 123
2004-05-12 09:17:13.848405 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
2004-05-12 09:17:14.583898 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
2004-05-12 09:17:15.334067 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
2004-05-12 09:17:16.084230 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
bash-2.05b$ cat 123| awk '{split($0,a,"\\.[0-9][0-9][0-9][0-9][0-9][0-9]"); printf "%s%s\n",a[1],a[2]}'
2004-05-12 09:17:13 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
2004-05-12 09:17:14 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
2004-05-12 09:17:15 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
2004-05-12 09:17:16 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>

Исходя из твоего ника попробую предположить, что пользуешься ты линуксом. Я пользую фрибсд. Однажды мне довелось посидеть за линуксом (RH80) там я заметил, что awk + printf работает немного непривычно.
Короче вариантов три:
1. Необходим совет линуксоида, пользующего awk.
Ау!! Линуксоиды, отзовитесь 8)
2. Попробовать sed
3. Попробовать print:
cat 123| awk '{split($0,a,"\\.[0-9][0-9][0-9][0-9][0-9][0-9]"); print a[1] a[2]}'

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "как sed или awk отрезать символы в поле"
Сообщение от Linuxadmin emailИскать по авторуВ закладки on 12-Май-04, 13:44  (MSK)
>Хм... а у меня работает:
>bash-2.05b$ cat 123
>2004-05-12 09:17:13.848405 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
>2004-05-12 09:17:14.583898 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
>2004-05-12 09:17:15.334067 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
>2004-05-12 09:17:16.084230 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
>bash-2.05b$ cat 123| awk '{split($0,a,"\\.[0-9][0-9][0-9][0-9][0-9][0-9]"); printf "%s%s\n",a[1],a[2]}'
>2004-05-12 09:17:13 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
>2004-05-12 09:17:14 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
>2004-05-12 09:17:15 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
>2004-05-12 09:17:16 192.168.8.118 -> 192.168.8.255 NBNS Registration NB BUH_IRA<03>
>
>Исходя из твоего ника попробую предположить, что пользуешься ты линуксом. Я пользую
>фрибсд. Однажды мне довелось посидеть за линуксом (RH80) там я заметил,
>что awk + printf работает немного непривычно.
>Короче вариантов три:
>1. Необходим совет линуксоида, пользующего awk.
>Ау!! Линуксоиды, отзовитесь 8)
>2. Попробовать sed
>3. Попробовать print:
>cat 123| awk '{split($0,a,"\\.[0-9][0-9][0-9][0-9][0-9][0-9]"); print a[1] a[2]}'


Все работает, огромное спасибо. Сделал все спомощью sed, удалил еще ненужные строки и отформатировал последнее поле (отделил число в "<>" в отдельное поле) - и все в одной команде !!!
Все-таки sed - это вещь !!!
Буду и дальше изучать его возможности.
С уважением, Карелин Игорь

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "как sed или awk отрезать символы в поле"
Сообщение от Linuxadmin emailИскать по авторуВ закладки on 12-Май-04, 12:30  (MSK)
>>>Это все классно, но если количество полей неизвестно и в любом из
>>>них может встречаться точка?
>>Sed из предыдущего ответа так и работает
>>cat file | sed -e s/\\.[0-9]\\{6\\}//
>>
>>
>>Кол-во полей - любое.
>>Точка - в любом месте в любом кол-ве.
>>Убиваем первую попавшуюся запись "точка-шесть цифр" в каждой строке.
>>
>>cat file | awk '{split($0,a,"\\.[0-9][0-9][0-9][0-9][0-9][0-9]"); printf "%s%s\n",a[1],a[2]}'
>
>В данном случае результатом является только время, а остальные поля лог-файла теряются.
>
Прошу прошения - ошибся с синтаксисом - вместо $0 поставил $2

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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