Справка по Perl-скрипту (время и сортировка) - PullRequest
0 голосов
/ 01 марта 2012

Я пытался сделать сценарий, но мне нужна помощь от вас, ребята .. это будет похоже на исправление .. Вывод, который я получил из моего скрипта и моего скрипта, был отправлен в виде вложения.

  1. Могу ли я получить этот вывод по левому краю?
  2. Кроме того, вы, ребята, можете уменьшить пространство от "ZAMAN" до "SAHA после удаления" *** ALARM "??
  3. Последнее, что я хочу, это чтобы выход пришел в порядке по времени? Я имею в виду, что верхняя часть написанного должна быть самой новой датой ..?

Я буду ждать вашего ответа ..

мой сценарий


$dosyaa="LOG.txt";
$dosya_out="KESIK_SEKTORLER.txt";

open fp1, $dosyaa;
open fp2, ">$dosya_out" or die "Cannot find $dosya_out for read\n :$!";

print fp2 "              BSC         BCF              ALARM TÜRÜ         ZAMAN                                               SAHA                     ALARM\n";

$count=0;
$SEG_NUM2=0;
$BCVI4=0;
$BTS_ST=0;
$toplam="";
$toplam2="";
$toplam_p="";
$deneme=0;

foreach $line(<fp1>) {
    chomp($line);
    if (($line =~ /QUAL/)) {$SEG_NUM2=$line};
    if (($line =~ /ALARM/)) {$SEG_NUM3=$line};
    if (($line =~ /ALARM/) or ($line =~ /BCCH MISSING/)) {
        $BTS_ST=$line;
        if (($BTS_ST =~ /BCCH MISSING/) or ($BTS_ST =~ /ALARM/) or ($BTS_ST =~ /QUAL/))  {
            $deneme=$deneme+1
        }
    };
    if (($line =~ /BCCH MISSING/)) {
        if (($BTS_ST =~ /BCCH MISSING/) or ($BTS_ST =~ /ALARM/) or ($BTS_ST =~ /QUAL/))  {
            $BCVI4=$line,
            $toplam= "'".(substr $SEG_NUM2, 06,10)."',";
            if ($toplam ne $toplam_p) {
                $toplam2=$toplam2.$toplam;
            };
            #if ($toplam==$toplam_p) {$toplam2=$toplam2.",".$toplam};
            print fp2 "$SEG_NUM2 $SEG_NUM3 $BCVI4\n";
            $toplam_p=$toplam;
            $toplam=0,$SEG_NUM2=0,$BTS_ST=0,$BCVI4=0,$BCVI5=0,$count++;
        }
    };
}
$toplam2=substr $toplam2,0,-1;
print fp2 "           KESIK SAHA SAYISI...............$count\n";

мой ввод txt

       BCORK01      BCF-0021  BTS-0022    QUAL      2012-02-29  19:21:45.65

* ALARM CO11802
(60624) 7767 BCCH MISSING

       BCORK02      BCF-0031  BTS-0022    QUAL      2012-02-29  19:13:45.65

* ALARM CO12802
(60624) 7767 BCCH MISSING

       BCORK03      BCF-0041  BTS-0022    QUAL      2012-02-29  19:11:45.65

* ALARM CO14802
(60624) 7767 BCCH MISSING

Мой вывод txt

 BSC          BCF          DATE           TIME         SAHA        ALARM
BCORK01      BCF-0021    2012-02-29     19:11:45.65   CO11801  BCH MISSING   
BCORK01      BCF-0021    2012-02-29     19:11:45.65   CO11802  BCH MISSSING 
BCORK01      BCF-0021    2012-02-29     19:11:45.65   CO11802  BCH MISSSING .                                                     

Ответы [ 2 ]

0 голосов
/ 01 июля 2012

Если я правильно читаю ваш вопрос, то вы хотите:

  1. Чтобы обрезать пробелы из вашего ввода
  2. Фиксированная ширина столбцов, чтобы все выстраивалось в линию как таблица
  3. Чтобы отсортировать вывод по дате и времени

Попробуйте эти изменения. Я удалил часть кода, чтобы мне было легче читать:

$dosyaa="LOG.txt";
$dosya_out="KESIK_SEKTORLER.txt";

open fp1, $dosyaa;
open fp2, ">$dosya_out" or die "Cannot find $dosya_out for read\n :$!";

$head_output_format="%-13s%-13s%-15s%-13s%-12s%s\n";
$body_output_format="%-13s%-12s%-15s%-14s%-9s%s\n";
printf fp2 $head_output_format, "BSC", "BCF", "DATE", "TIME", "SAHA", "ALARM";

$count=0;
$SEG_NUM2="";
$SEG_NUM3="";
%output_records = ();

foreach $line(<fp1>) {
    chomp($line);
    # Trim whitespace:
    $line =~ s/^\s+//;
    $line =~ s/\s+$//;

    if (($line =~ /QUAL/)) {$SEG_NUM2=$line}
    if (($line =~ /ALARM/)) {$SEG_NUM3=$line}
    if (($line =~ /\(/)) {
        ($NUM1, $NUM2, @ALARM_split) = split (" ", $line);
        $ALARM = join (" ", @ALARM_split);
        ($BSC, $BCF, $BTS_ignore, $QUAL_ignore, $DATE, $TIME) = split (/\s+/, $SEG_NUM2);
        ($STAR_ignore, $ALARM_ignore, $SAHA) = split (" ", $SEG_NUM3);
        if ($ALARM eq "BCCH MISSING") {
            push @{$output_records{"$DATE $TIME"}}, sprintf ($body_output_format, $BSC, $BCF, $DATE, $TIME, $SAHA, $ALARM);
        }
        $SEG_NUM2="";
        $SEG_NUM3="";
        $count++;
    }
}

# sort {$b cmp $a} (reverse sort)
foreach $date_time (sort {$b cmp $a} keys(%output_records)) {
    foreach $line (@{$output_records{$date_time}}) {
        print fp2 $line;
    }
}

#print fp2 "           KESIK SAHA SAYISI...............$count\n";
0 голосов
/ 01 марта 2012
open fp2, ">$dosya_out" or die "Cannot find $dosya_out for read\n :$!";

Вы можете начать с проверки правильности сообщений об ошибках: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...