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

Исходное сообщение
"Митрофаныч, ты где???"

Отправлено pavlinux , 12-Фев-12 02:21 
Никак не вдуплю, на sed желательно....

Нужно в логе найти последнее вхождение подстроки..

Типа

[ 12.02.2012 15:01 ]: Маша мыла жопой раму, Миша жопой мыл балкон
[ 12.02.2012 15:05 ]: Маша мыла жопой раму, писька, Миша жопой мыл балкон
[ 12.02.2012 15:09 ]: Маша мыла жопой раму, Миша жопой мыл балкон
[ 12.02.2012 15:10 ]: Маша мыла жопой раму, Миша жопой мыл балкон, пля
[ 12.02.2012 15:11 ]: Маша мыла жопой раму, Миша жопой мыл балкон
[ 12.02.2012 15:15 ]: Маша мыла жопой раму, писька, Миша жопой мыл балкон
[ 12.02.2012 15:17 ]: Маша мыла жопой раму, Миша жопой мыл балкон, пля

Надо вывести только последние "пискька" и "пля"

[ 12.02.2012 15:15 ]: Маша мыла жопой раму, писька, Миша жопой мыл балкон
[ 12.02.2012 15:17 ]: Маша мыла жопой раму, Миша жопой мыл балкон, пля

---

Как вариант сделать реверс и найти первые вхождения, но блин, полтретьего, лениво думать... :)



Содержание

Сообщения в этом обсуждении
"Митрофаныч, ты где???"
Отправлено pavel_simple , 12-Фев-12 09:51 
>[оверквотинг удален]
> [ 12.02.2012 15:17 ]: Маша мыла жопой раму, Миша жопой мыл балкон,
> пля
> Надо вывести только последние "пискька" и "пля"
> [ 12.02.2012 15:10 ]: Маша мыла жопой раму, писька, Миша жопой мыл
> балкон
> [ 12.02.2012 15:17 ]: Маша мыла жопой раму, Миша жопой мыл балкон,
> пля
> ---
> Как вариант сделать реверс и найти первые вхождения, но блин, полтретьего, лениво
> думать... :)

совсем ты павлин ахирел, митрофаныч только и ждёт как тебе в полтретьего чем-нибудь помочь.


"Митрофаныч, ты где???"
Отправлено Пиздос , 12-Фев-12 14:00 
> совсем ты павлин ахирел, митрофаныч только и ждёт как тебе в полтретьего
> чем-нибудь помочь.

А вдруг у него творческая бессонница



"Митрофаныч, ты где???"
Отправлено Andrey Mitrofanov , 16-Фев-12 18:48 
>> совсем ты павлин ахирел, митрофаныч только и ждёт как тебе в полтретьего
>> чем-нибудь помочь.
> А вдруг у него творческая бессонница

Не-а. С такой :Q постановкой задачи, созрел "симметричный" ответ: логгер от поттеринга поставить -- он последнюю строчку лога в статусе сервиса показывает.


"Митрофаныч, ты где???"
Отправлено awk_noob , 16-Фев-12 17:27 
> Никак не вдуплю, на sed желательно....
> Нужно в логе найти последнее вхождение подстроки..

ну если можете найти первое вхождение и вывести на печать, то можно попробывать сначала файл перевернуть. из однострочников тут же на опеннете
>sed -n '1!G;h;$p' 1.txt

з.ы. и работать до пол-третьего это тяжко


"Митрофаныч, ты где???"
Отправлено pavlinux , 16-Фев-12 17:36 
>> Никак не вдуплю, на sed желательно....
>> Нужно в логе найти последнее вхождение подстроки..
> ну если можете найти первое вхождение и вывести на печать, то можно
> попробывать сначала файл перевернуть. из однострочников тут же на опеннете
>>sed -n '1!G;h;$p' 1.txt

Уже на авке сделал, но эту можно доделать..., быстрее наверно будет.


"Митрофаныч, ты где???"
Отправлено Andrey Mitrofanov , 16-Фев-12 19:15 
>>>sed -n '1!G;h;$p' 1.txt
> Уже на авке сделал, но эту можно доделать..., быстрее наверно будет.

Не будет. //Весь 500Мб, скажем, лог в сед всосать -- ооооооочень долго.

man tac  - _Это _будет быстрее.
|tac |sed -n '/паттерн/{p;q}'   , если я правильно понял матершину~~~


PS: Хотя _не с файлом и tac притормозит, но по-любому быстрее в памяти sed-а~
$ time cat error.log.1| tac |head -1
2012/02/16 06:25:13 [notice] 2286#0: reopening logs

real    0m0.937s
$ time tac <error.log.1 |head -1
2012/02/16 06:25:13 [notice] 2286#0: reopening logs

real    0m0.002s
$ time cat error.log.1 |sed -n '/client/h;${g;p}'
2012/02/15 17:44:47 [info] 2286#0: *11656197 proxied session done, client: 10.1.4.190, server: 0.0.0.0:110, login: "client", upstream: 127.0.0.2:110

real    0m1.942s
$ time cat error.log.1 |tac |sed -n '/client/{p;q}'
2012/02/15 17:44:47 [info] 2286#0: *11656197 proxied session done, client: 10.1.4.190, server: 0.0.0.0:110, login: "client", upstream: 127.0.0.2:110

real    0m1.859s
$ wc -cl error.log.1
  2848712 373326051 error.log.1


PPS:
$ time seq 1 40000| sed -n '1!G;h;$p' >/dev/null

real    0m1.594s
$ time seq 1 40000| tac >/dev/null

real    0m0.039s


"Митрофаныч, ты где???"
Отправлено pavlinux , 22-Фев-12 03:43 
>>>>sed -n '1!G;h;$p' 1.txt
>> Уже на авке сделал, но эту можно доделать..., быстрее наверно будет.
> Не будет. //Весь 500Мб, скажем, лог в сед всосать -- ооооооочень долго.


cat text.txt | sed -n '/пля/{p;d;}' | sed  '1!G;h;$!d' | sed q

Соединить в одно выражение никак не получается :(


"где, где... на работЕ."
Отправлено Andrey Mitrofanov , 22-Фев-12 09:23 
>>> Уже на авке сделал, но эту можно доделать..., быстрее наверно будет.

Ещё раз: быстрее будет _только_ с tac-ом, а чего там 1 строчку выведет, без разницы. Хоть 'fgrep -m1' (вот тебе, кстати, ещё подарочек, да).

>> Не будет. //Весь 500Мб, скажем, лог в сед всосать -- ооооооочень долго.
> Соединить в одно выражение никак не получается :(

??! Пьян чтоле всё ещё? :-P [Прям завидно~] 'man sed' до прояснения в уму. В смысле прочитай то заклинание и ужаснись. Перечитай _все, что я тебе накидал, посмотри почему они все медленне tac, почему "то заклинание" медленне и совершенно не то делает.

...
cat text.txt |tac |sed -n '/подруга/{p;q}'
cat text.txt |tac |fgrep -m1 'подруга'