|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Tatyana Gorbanyova 2:5061/32.34 03 Sep 2002 14:08:57 To : Andrey Kharchenko Subject : Re: Log file -------------------------------------------------------------------------------- Однажды, 03 Sep 02 13:01, Andrey Kharchenko написал к All про Log file: AK> Требуется помощь спецов. я не то чтобы спец, но тут помочь смогу ;) AK> Есть текстовый лог-файл следующего формата: AK> === AK> 9.09.02 9:30 19.4 20.2 14.9 20.5 AK> 10.09.02 10:00 20.7 20.8 16.5 21.1 AK> === AK> Hужно перлом сделать следующее, что бы в переменной $date содержалась AK> дата в формате 20020909 причем замете, что дата в лог-файле 9.09.02 и AK> $time содержал 093000, тоже, обратите внимание 9:30. Если же 10:09.02 AK> и 10:00 то $date 20020910 и $time 100000. Остальные данные(колонки) AK> должны содержаться в $t1, $t2, $t3, $t4 AK> Как это реализовать? Интересуют реальные примеры. #!/usr/bin/perl -w use strict; my ($matched,$date,$time,$t1,$t2,$t3,$t4,$v1,$v2,$v3); open (LOG, "</var/log/logfile" ) || die "Can't open input: $!\n"; while (<LOG>) # с концами строк разберемся так chomp; # или так tr/\x0d\x0a//d; # это на случай, если таковые строки имеют место быть в твоем файле :) next if /\A\=/; # теперь regexp (могу ошибиться, но я имею ввиду, что у тебя в лог-файле между # полями пробелы) $matched = /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/x; # пропустим строки, которые не попадают под наш regexp next unless $matched; # начнем обрабатывать $_=$1;($v1,$v2,$v3)=split('.'); $date=sprintf("%04d%02d%02d",$v3,$v2,$v1); # так, теперь, если я правильно понимаю, тебе в $time нужно _6_ знаков # тогда так: $_=$2;($v1,$v2)=split(':'); $date=sprintf("%02d%02d%02d",$v1,$v2,'00'); # или так (если ты два лишних нуля приписал) $date=sprintf("%02d%02d",$v1,$v2); $t1=$3;$t2=$4;$t3=$5;$t4=$6; # дальше - творишь с ЭТИМ все, что тебе нужно ;) Hаписано на коленке за пять минут. Понятное дело, можно сделать короче и ппроще, наверное. Dixi Sincerely yours, Татьяна... До встречи, Andrey :) >> Hаше Радио - 103.0 FM ... #PGP Key fingerprint = 40 8A 2A 91 9B 80 76 93 0C 4E 85 CB 62 5B 9A C0 --- GoldED+/W32 1.1.4.7 || ICQ: 139313756 || ti<at>donpac.ru * Origin: Жизненный опыт приходит по глупости или неопытности! (2:5061/32.34) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/33043d748ebe.html, оценка из 5, голосов 10
|