- как открыть файл с конца?, XAnder, 14:01 , 01-Ноя-11 (1)
> те грубо говоря сделал: tac file и читаю его до первого совпадения > слова XXX, после чего файл закрывается.А теперь давайте перепишем это предложение на шелле: tac file | grep -m 1 XXX
Это если нужна только совпадающая строка. А если нужны все строки от совпадающей до конца: tac file | perl -ne 'print; exit 0 if m/XXX/;'
Ну или вместо перла свой любимый скриптовый язык. Можно в конце ещё добавить "| tac", чтобы вернуть строки к нормальному порядку, но тогда рискуете получить подвисание, если XXX нет (или очень далеко от конца) в гигабайтном файле.
- как открыть файл с конца?, httpd, 15:46 , 01-Ноя-11 (2)
> А теперь давайте перепишем это предложение на шелле: > tac file | grep -m 1 XXX > Это если нужна только совпадающая строка. А если нужны все строки от > совпадающей до конца: > tac file | perl -ne 'print; exit 0 if m/XXX/;' > Ну или вместо перла свой любимый скриптовый язык.так не пойдет, "tac file" будет читать весь файл сконца наперед, а только потом результат будет перенаправлен на grep или perl. Мне надо читать файл с конца только до первого совпадения слова. Похоже баш утилитами это не под силу, проще написать скрипт используя seek(), вобщем в процессе. если есть еще идеи, буду рад выслушать.
- как открыть файл с конца?, XAnder, 16:16 , 01-Ноя-11 (3)
> так не пойдет, "tac file" будет читать весь файл сконца наперед, а > только потом результат будет перенаправлен на grep или perl.Он в самом деле так себя ведёт? Гм... я был о нём лучшего мнения. К гигабайтным файлам, правда, применять не приходилось.
- как открыть файл с конца?, XAnder, 16:34 , 01-Ноя-11 (4)
>> так не пойдет, "tac file" будет читать весь файл сконца наперед, а >> только потом результат будет перенаправлен на grep или perl. > Он в самом деле так себя ведёт? Гм... я был о нём > лучшего мнения. К гигабайтным файлам, правда, применять не приходилось.Нет, ну поклёп же гнусный :-) только что проверил у себя - ничего подобного, работает исключительно быстро. Файл у меня, конечно, нашёлся только 400М, но команда отработала мгновенно. Для справки: tac из coreutils 8.5 на Debian Squeeze
- как открыть файл с конца?, httpd, 17:21 , 01-Ноя-11 (5)
>>> так не пойдет, "tac file" будет читать весь файл сконца наперед, а >>> только потом результат будет перенаправлен на grep или perl. >> Он в самом деле так себя ведёт? Гм... я был о нём >> лучшего мнения. К гигабайтным файлам, правда, применять не приходилось. > Нет, ну поклёп же гнусный :-) только что проверил у себя - > ничего подобного, работает исключительно быстро. Файл у меня, конечно, нашёлся только > 400М, но команда отработала мгновенно. > Для справки: tac из coreutils 8.5 на Debian Squeeze точно, пардон. эт у меня что-то подвисло в процессе теста... знач попробую таким методом тоже, сенкс.
- как открыть файл с конца?, httpd, 23:58 , 01-Ноя-11 (6)
>[оверквотинг удален] >> слова XXX, после чего файл закрывается. > А теперь давайте перепишем это предложение на шелле: > tac file | grep -m 1 XXX > Это если нужна только совпадающая строка. А если нужны все строки от > совпадающей до конца: > tac file | perl -ne 'print; exit 0 if m/XXX/;' > Ну или вместо перла свой любимый скриптовый язык. > Можно в конце ещё добавить "| tac", чтобы вернуть строки к нормальному > порядку, но тогда рискуете получить подвисание, если XXX нет (или очень > далеко от конца) в гигабайтном файле.кстати, как сделать вот в этом примере
perl -ne 'print; exit 0 if m/XXX/;' в условии что-то типа if(($CurrentDate - $Dateinfile)>300) те вывести из лог файла, только строчки которые были добавлены за последние 5 минут(300сек.) $CurrentDate получить не сложно: $CurrentDate=`date +%s` а вот с $Dateinfile все намного сложнее, в логе дата имеет формат: # tac access_log | head -1| awk '{print $4}' | sed 's/\[//;s/:/ /' 30/Oct/2011 20:09:09 и стандартным средством такой формат в юникс формат не сконвертить: # date --date='30/Oct/2011 20:09:09' +%s date: invalid date `30/Oct/2011 20:09:09' изменять формат лога не желательно, всякие стастистики там еще собираются по ним.
|