Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Andrew Grekhov
Зарегистрирован: 29.06.2005 Сообщения: 200
|
Добавлено: Вс Ноя 16 2008 09:21 Заголовок сообщения: Помогите с sed'ом |
|
|
Имеются строки вида:
18:08:03.006380 ethertype dhcp1.bootps
00:11:22:33:44:55
18:08:03.006398 ethertype dhcp2.bootps
00:11:22:33:44:55
Надо вид:
18:08:03.006380 ethertype dhcp1.bootps 00:11:22:33:44:55
18:08:03.006398 ethertype dhcp2.bootps 00:11:22:33:44:55
Извините, что туплю, но что-то не получается
убрать только один перевод строки после bootps
Если интерестно: смотрю какие хосты "заставляют"
dhcp сервер на свой запрос отвечать броадкастом.
Применение именно sed конечно не обязательно,
желательно чтото из /bin .Не PERL. |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Пн Ноя 24 2008 15:28 Заголовок сообщения: а зачем нужен тэг <br>? |
|
|
нужен именно sed?
вот как через awk: Код: | awk "{ s = $0; getline; print s \" \" $0 }" |
-----------------------------------
а зачем нужен тэг <br>? |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пн Ноя 24 2008 23:44 Заголовок сообщения: |
|
|
Подтверждаю. awk во многих случаях заруливает все! |
|
Вернуться к началу |
|
|
Andrew Grekhov
Зарегистрирован: 29.06.2005 Сообщения: 200
|
Добавлено: Вт Ноя 25 2008 10:00 Заголовок сообщения: |
|
|
2 критикан
Спасибо щас попробую.
awk - не работал я пока с ним,
да и по обзору гдето было, что sed быстрее.
Когда файл маленький без разницы, а когда 1,2 Гб...
Ж(
Щас вначале на маленьком отработаю,
а после возьмусь за 60ШТ по 20М файлам. |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Ноя 25 2008 11:22 Заголовок сообщения: зачем писать программу под винды, если это встроено в юникс? |
|
|
если интересно, то вот временные показатели:
awk -- gawk.exe, портирован в консольное приложение под винды
ось -- win2000
камень -- целерон 2,4 ГГц
рам -- 768 Мб
файл -- 1,68 Гб
время старта -- 11:01:58
время финиша -- 11:11:22
итого полтора гига за десять минут, исполняемая команда указана выше
------------------------------------------
зачем писать программу под винды, если это встроено в юникс?
Последний раз редактировалось: критикан (Вт Ноя 25 2008 12:44), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Andrew Grekhov
Зарегистрирован: 29.06.2005 Сообщения: 200
|
Добавлено: Вт Ноя 25 2008 11:44 Заголовок сообщения: |
|
|
Я не говорил, что мне надо под винды.
Есть лог tcpdump, его надо привести к человеческому виду.
Всё под linux. Точнее из php вызываю
shell функции.
Вот недописаный пока кусок, если интерестно.
А ещё будет стандартное sort, uniq...
Код: |
/usr/sbin/tcpdump -e -n -v -r $file src host dhcp1 or src host dhcp2 or src host dhcp3 and dst host 255.255.255.255|grep \"00:[0-9a-f:]*\" |tr -d \"\t\"|tr -s \" \"|cut -d \" \" -f 1,5,25|awk '{ s = \$0; getline; print s\" \"\$0 }'
|
Про скорость было сказано, что sed всегда быстрее awk
хотя и синтаксис понепривычнее будет.
Вот после таких больших обработок и задумываешься
о производительности системы.
sed, кстати, за сколько управится? |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Ноя 25 2008 13:33 Заголовок сообщения: не хули учителя за незнание -- он учит получать новые знания |
|
|
похоже, тов. Грехов находится в плену заблуждений, присущих начинающим юниксоидам, которые, чуть познакомившись с юниксом, сразу пинают своего вчерашнего учителя-винду. в винде, уважаемый Грехов, всё устроено по принципам (хоть иногда до-нельзя упрощённым, но) известным из юникса аж с 70-х годочков прошлаго ("а" поставлено намеренно) веку. поэтому мой пример вполне можно использовать, так как он демонстрирует принцип, а не конкретное приложение, ведь портирование awk'а в винду не изменило самого awk'а. я привёл пример под винду просто потому, что под рукой сейчас юникса нет.
между прочим, Вашу мущщняйщщую строку Код: | ...|grep \"00:[0-9a-f:]*\" |tr -d \"\t\"|tr -s \" \"|cut -d \" \" -f 1,5,25|awk '{ s = \$0; getline; print s\" \"\$0 }' |
можно написать на одном только awk'е. примерно так: Код: | ...|awk -F ' ' '/00:[0-9a-f:]+/ { gsub(/\t/, \"\"); s=\$1 \$5 \$25; getline; print s\" \"\$1 }' |
правда сейчас не могу представить проверенный и наилучший вариант, потому что целиком ситуацию не могу смоделировать
---------------------------------------------------
не хули учителя за незнание -- его задача научить получать новые знания, а не просто научить известному |
|
Вернуться к началу |
|
|
|