>awk '{
>i = index($0, "error#:");
>if (i)
>{
> tim = strftime("%Y.%m.%d|%H:%M:%S|", substr($0,index($0,":")+1, 10));
> if (index(tim, "1970.01.01|")) tim="0000.00.00|00.00.00|";
> print tim substr($0,i+7)
>}
>}' < CHRIS_02250805.txt | sort -ut\| +2Спасибо, Ваш скрипт просто то что нужно!!
Но теперь обнаружил ещё кое что. В исходном файле достаточно не структурированная информация, из неё можно выделить строки с:
Юниксовским форматом (секунды с 1970 г.),
нормальным форматом даты
просто бессмысленным текстом (без информации о дате).
$ awk '{ if (index($0, "error#:")) print substr($0,index($0,":")+1,19) "| " substr($0,index($0,"error#:")+7) }' CHRIS_02240805.txt | sort -ut\| +2
SxINPluginException| 994,301,001 >SXFW ,USERError
1234984959559|E|VBJ| 510,102,002 >database error occured<"
1235224852014|E|VBJ| 510,102,005 >Inconsistency in database:
1234984959543|E|VBJ| 904,108,025 >SXFW ,OTHER_ERROR:SQL_EXCEPTION<"
2009.02.24_05:52:13| 904,111,055 >SXFW ,CORBA EXCEPTION:Error
Теперь хочу сделать проверку, к примеру:
если строка начинается с "123"
то выполнить
strftime("%Y.%m.%d|%H:%M:%S| ", substr($0,index($0,":")+1, 10));
в противном случае выполнить
print substr($0,index($0,":")+1,19)
Но пока не могу разобраться как это выполнить на awk.