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

Исходное сообщение
"сортировка по времени внутри файла?"

Отправлено alxk , 16-Окт-07 18:12 
Есть файл.
16.10.2007,15:48:21,Security,Success Audit,Вход
16.10.2007,11:48:21,Security,Success Audit,Использование
10.10.2007,18:48:21,Security,Success Audit,Вход
10.10.2007,10:48:21,Security,Success Audit,Использование

С помощью чего можно сделать чтобы на выходе было самое ранее время каждый день?
т.е.
16.10.2007,11:48:21,Security,Success Audit,Использование
10.10.2007,10:48:21,Security,Success Audit,Использование


Содержание

Сообщения в этом обсуждении
"сортировка по времени внутри файла?"
Отправлено angra , 16-Окт-07 19:04 
Вы не поверите, но при помощи стандартного sort :)


"сортировка по времени внутри файла?"
Отправлено alxk , 16-Окт-07 20:16 
>Вы не поверите, но при помощи стандартного sort :)

sort как я понимаю просто перетосует,а мне надо чтобы остались только рание часы или я не понял


"сортировка по времени внутри файла?"
Отправлено alxk , 16-Окт-07 22:18 
в линукс есть unic
-w, --check-chars=N
compare no more than N characters in lines
а в FreeBSD нет
а тоб я ненужные строки поудалял.
А что есть аналогичное?

"сортировка по времени внутри файла?"
Отправлено anonymous , 16-Окт-07 23:38 
>в линукс есть unic
>-w, --check-chars=N
>compare no more than N characters in lines
>а в FreeBSD нет
>а тоб я ненужные строки поудалял.
>А что есть аналогичное?

не unic, а uniq -- может в этом проблема?


"сортировка по времени внутри файла?"
Отправлено alxk , 17-Окт-07 09:32 
>не unic, а uniq -- может в этом проблема?

ага
а еслиб не ошибся вы бы и это сообщение не написали
нет проблема не в этом


"сортировка по времени внутри файла?"
Отправлено angra , 17-Окт-07 18:50 
>>Вы не поверите, но при помощи стандартного sort :)
>
>sort как я понимаю просто перетосует,а мне надо чтобы остались только рание
>часы или я не понял

Это я не понял задачи, думал вам надо отсортировать по времени, не обращая внимания на день. Тогда придется добавить uniq -w. В общем используя только sort и uniq эту задачу решить можно, но может действительно стоит взять awk или perl


"сортировка по времени внутри файла?"
Отправлено vic , 17-Окт-07 13:18 
>[оверквотинг удален]
>16.10.2007,15:48:21,Security,Success Audit,Вход
>16.10.2007,11:48:21,Security,Success Audit,Использование
>10.10.2007,18:48:21,Security,Success Audit,Вход
>10.10.2007,10:48:21,Security,Success Audit,Использование
>
>С помощью чего можно сделать чтобы на выходе было самое ранее время
>каждый день?
>т.е.
>16.10.2007,11:48:21,Security,Success Audit,Использование
>10.10.2007,10:48:21,Security,Success Audit,Использование

Как я понимаю это некий лог-файл куда добавляются записи и они в принципе уже отсортированы по дате-времени. Тогда вот такой скрипт может помочь:
awk '{
    cday = substr($0, 0, 2);
    if (day != cday) { print $0 ; day = cday; }
}' day=0 < file.log;


"сортировка по времени внутри файла?"
Отправлено tret , 18-Окт-07 11:01 
>awk '{
>    cday = substr($0, 0, 2);
>    if (day != cday) { print $0 ;
>day = cday; }
>}' day=0 < file.log;

Типа работает но не так.
Сортировка вроде есть,но мне нужно меньшее время(а у вас верхнее делает,хотя может вы только наводку дали...)
16.10.2007,15:48:21
16.10.2007,9:48:21
16.10.2007,8:40:21

а если сортирую хитро в обратную получается так
16.10.2007,9:48:21
16.10.2007,8:40:21
16.10.2007,15:48:21
и раннее время опять не первое стоит(если uniq потом делать)


"сортировка по времени внутри файла?"
Отправлено vic , 18-Окт-07 11:15 
>>awk '{
>>    cday = substr($0, 0, 2);
>>    if (day != cday) { print $0 ;
>>day = cday; }
>>}' day=0 < file.log;
>
>Типа работает но не так.
>Сортировка вроде есть,но мне нужно меньшее время(а у вас верхнее делает,хотя может
>вы только наводку дали...)

Ну да верхнее, т.к. если лог обычным образом ведется, методом добавления записей, то они автоматом по времени упорядочены.
>16.10.2007,15:48:21
>16.10.2007,9:48:21
>16.10.2007,8:40:21

вот это обратный порядок.

>
>а если сортирую хитро в обратную получается так
>16.10.2007,9:48:21
>16.10.2007,8:40:21
>16.10.2007,15:48:21

фигня какая-то, 8 < 9, и должно быть тогда так:
>16.10.2007,15:48:21   # из алфавитной.
>16.10.2007,8:40:21
>16.10.2007,9:48:21

если есть возможность писать 08 вместо 8, то надо это использовать.
и еще у sort есть ключ сортировать не по алфавиту, а по числам, его надо использовать.


"сортировка по времени внутри файла?"
Отправлено Andrew , 19-Окт-07 00:36 
>фигня какая-то, 8 < 9, и должно быть тогда так:
>>16.10.2007,15:48:21   # из алфавитной.
>>16.10.2007,8:40:21
>>16.10.2007,9:48:21

Это не фигня какая-то, это сортировка по символам. 1 идет раньше чем 8 и 9. А 5ка раньше чем двоеточие. Что тут непонятного?
>
>если есть возможность писать 08 вместо 8, то надо это использовать.
>и еще у sort есть ключ сортировать не по алфавиту, а по
>числам, его надо использовать.

Решение на мой взгляд достаточно простое и незамысловатое: выбираем записи с одинаковой датой, сортируем по возрастанию и берем самую первую запись через head. Все.

А товарисч наверняка хочет фиксировать начало работы кого-то или чего-то. Задачка элементарная.
Если не сможешь это сделать через конвейер, сделай промежуточное сохранение результата выборки и сортировки в файлы.


"сортировка по времени внутри файла?"
Отправлено vic , 19-Окт-07 11:29 
>>фигня какая-то, 8 < 9, и должно быть тогда так:
>>>16.10.2007,15:48:21   # из алфавитной.
>>>16.10.2007,8:40:21
>>>16.10.2007,9:48:21
>
>Это не фигня какая-то, это сортировка по символам. 1 идет раньше чем
>8 и 9. А 5ка раньше чем двоеточие. Что тут непонятного?

Читать пост внимательней надо, фраза "фигня какая-то" относится к примеру выше этой фразы (где строка с 8 идет ниже чем с 9), а ниже фразы как раз и написано как должно быть.

>
>Решение на мой взгляд достаточно простое и незамысловатое: выбираем записи с одинаковой
>датой, сортируем по возрастанию и берем самую первую запись через head.
>Все.

Да я уже awk-скрипт привел с решением. Чего повторятся-то. В один проход к тому же.