Когда делаю cat logfile.log*|mail my, то файлы читаются в таком порядке logfile.log logfile.log.1 и т.д.
Соответсвенно, вначале выводятся записи за 30 число, потом за 29 и т.д.,что выглядит некрасиво.
Можно ли сделать так (с помощью регулярного выражения), чтобы файлы читались в обратном (неалфавитном) порядке, а в порядке создания: logfile.log.2 logfile.log.1 logfile.log?
>Когда делаю cat logfile.log*|mail my, то файлы читаются в таком порядке logfile.log
>logfile.log.1 и т.д.
>Соответсвенно, вначале выводятся записи за 30 число, потом за 29 и т.д.,что
>выглядит некрасиво.
>Можно ли сделать так (с помощью регулярного выражения), чтобы файлы читались в
>обратном (неалфавитном) порядке, а в порядке создания: logfile.log.2 logfile.log.1 logfile.log?cat `ls -ltr | awk '{if($9 ne "") print $9}'` | mail user@example.com
а если так:cat `ls -tr logfile.log.*` | mail user@example.com
?
>Когда делаю cat logfile.log*|mail my, то файлы читаются в таком порядке logfile.log
>logfile.log.1 и т.д.
>Соответсвенно, вначале выводятся записи за 30 число, потом за 29 и т.д.,что
>выглядит некрасиво.
>Можно ли сделать так (с помощью регулярного выражения), чтобы файлы читались в
>обратном (неалфавитном) порядке, а в порядке создания: logfile.log.2 logfile.log.1 logfile.log?
for i in `ls logfile.log* | sort -nr`; do cat $i | mail my; done
>for i in `ls logfile.log* | sort -nr`; do cat $i |
>mail my; done
Странно, но этот вариант не прошел.
А то, что предложил skyogre - прошел.
Спасибо -за помощь.
>>for i in `ls logfile.log* | sort -nr`; do cat $i |
>>mail my; done
>Странно, но этот вариант не прошел.
>А то, что предложил skyogre - прошел.
>Спасибо -за помощь.Действительно странно. Нельзя ли увидеть сообщения о возникших ошибках?
>>>for i in `ls logfile.log* | sort -nr`; do cat $i |
>>>mail my; done
>>Странно, но этот вариант не прошел.
>>А то, что предложил skyogre - прошел.
>>Спасибо -за помощь.
>
>Действительно странно. Нельзя ли увидеть сообщения о возникших ошибках?Что вижу я.
Во-первых вместо одно письма получаем по письму на файл. Т.е. изначальная задача не выполняется :(
Во-вторых сортировка хоть и задается числовая, но выполняется она для строковых значений. И опять требуемый порядок следования файлов мы не получаем. Исправить можно заданием точки как раздилителя полей и реверсной числовой сортировкой по третьему полю. Но нужно ли? (см. первое замечание)
>Что вижу я.
>Во-первых вместо одно письма получаем по письму на файл. Т.е. изначальная задача
>не выполняется :(
Согласен. Виной тому - моя невнимательность. Необходимо объединить обрабатываемые в один
и уже его отправить по почте:
$ for i in `ls logfile.log* | sort -nr`; do cat $i >> log_for_mail; done; cat log_for_mail | mail my>Во-вторых сортировка хоть и задается числовая, но выполняется она для строковых значений.
>И опять требуемый порядок следования файлов мы не получаем. Исправить можно
>заданием точки как раздилителя полей и реверсной числовой сортировкой по третьему
>полю. Но нужно ли? (см. первое замечание)
А вот тут позволю себе не согласиться. Указание опции -n заставляет команду sort
игнорировать в сортируемых строках "неподходящие" символы (то есть отличные от цифр,
разделителей целой и дробной частей и указателей знака числа). Вот тому пример:$ touch file
$ touch file.1
$ touch file.2
$ touch file.3
$ ls file* | sort -nr
file.3
file.2
file.1
fileДля пущей наглядности можно несколько изменить условия задачи:
$ touch f1ile
$ touch fi2le
$ touch fil3e
$ ls f* | sort -nr
fil3e
fi2le
f1ileПравда, должен оговориться, что я использовал GNU-версию sort (SuSE Linux 9.2 и 10.0, а
также FreeBSD 4.9); возможно, данная возможность существует только в ней...