Есть файл.
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,Использование
Вы не поверите, но при помощи стандартного sort :)
>Вы не поверите, но при помощи стандартного sort :)sort как я понимаю просто перетосует,а мне надо чтобы остались только рание часы или я не понял
в линукс есть unic
-w, --check-chars=N
compare no more than N characters in lines
а в FreeBSD нет
а тоб я ненужные строки поудалял.
А что есть аналогичное?
>в линукс есть unic
>-w, --check-chars=N
>compare no more than N characters in lines
>а в FreeBSD нет
>а тоб я ненужные строки поудалял.
>А что есть аналогичное?не unic, а uniq -- может в этом проблема?
>не unic, а uniq -- может в этом проблема?ага
а еслиб не ошибся вы бы и это сообщение не написали
нет проблема не в этом
>>Вы не поверите, но при помощи стандартного sort :)
>
>sort как я понимаю просто перетосует,а мне надо чтобы остались только рание
>часы или я не понялЭто я не понял задачи, думал вам надо отсортировать по времени, не обращая внимания на день. Тогда придется добавить uniq -w. В общем используя только sort и uniq эту задачу решить можно, но может действительно стоит взять awk или perl
>[оверквотинг удален]
>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;
>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 потом делать)
>>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 есть ключ сортировать не по алфавиту, а по числам, его надо использовать.
>фигня какая-то, 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. Все.
А товарисч наверняка хочет фиксировать начало работы кого-то или чего-то. Задачка элементарная.
Если не сможешь это сделать через конвейер, сделай промежуточное сохранение результата выборки и сортировки в файлы.
>>фигня какая-то, 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-скрипт привел с решением. Чего повторятся-то. В один проход к тому же.