Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Log file   Andrey Kharchenko   03 Sep 2002 13:01:47 
 Re: Log file   Vladimir Podgorny   03 Sep 2002 14:02:55 
 Re: Log file   Tatyana Gorbanyova   03 Sep 2002 14:08:57 
 Re: Log file   Andrey Kharchenko   04 Sep 2002 10:26:31 
Архивное /ru.perl/33043d748ebe.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional