Schrift
[thread]12776[/thread]

Zeilensprung in einer Ausgabe



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
Gast Gast
 2008-11-18 14:19
#116353 #116353
Hi zusammen,

ich würde gerne eine Ausgabe durchsuchen und wenn erfolgreich direkt in in die nächste Zeile springen.

z.B.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
open (NAVI ,"$Ausgabe ");
while (my $line = <NAVI>) {
if ($line =~ m/SPPORT/ ) {
$port_section = 1;
}
if($port_section == 1) {
next if($line =~ m/^SP\sName:\s+SP+\s+($SP)/);
next if($line =~ m/^SP\sPort\sID:\s+($PORT)/);
if($line =~ m/^Link\sStatus:\s+(\w+)/){
$status_link = $1; print"$status_link\n";
}
}
close (NAVICLIOUT);


jetzt gebe ich die Parameter $SP und $PORT beim Aufruf des Scriptes mit.
Jetzt werden mir aber alle Werte die in $status_link drin stehen angezeigt und nicht nur diese bei welden die Bedingungen
Code: (dl )
1
2
next if($line =~ m/^SP\sName:\s+SP+\s+($SP)/);			 
next if($line =~ m/^SP\sPort\sID:\s+($PORT)/);

übereinstimmen. Oder muss mann das andres lösen?

Gruß und danke
Crian
 2008-11-18 14:26
#116354 #116354
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Am besten gibts du noch einen Ausschnitt der untersuchten Datei und das erwartete und das produzierte Ergebnis an. So kann ich nur raten, und das wäre doch schade.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Gast Gast
 2008-11-18 14:42
#116356 #116356
hi,

alles klar.

Ausgabe:

SP Name: SP A
SP Port ID: 4
SP UID: 50:06:01:60:C1:E0:2B:7A:50:06:01:60:41:E0:2B:7A
Link Status: Up
Port Status: Online
Switch Present: YES
Switch UID: 10:00:00:05:1E:03:D9:16:20:07:00:05:1E:03:D9:16
SP Source ID: 67328
MAC Address: Not Applicable
SFP State: Online
Reads: 3064353
Writes: 17936913
Blocks Read: 103971645
Blocks Written: 867380028
Queue Full/Busy: 0

SP Name: SP A
SP Port ID: 5
SP UID: 50:06:01:60:C1:E0:2B:7A:50:06:01:61:41:E0:2B:7A
Link Status: Down
Port Status: Online
Switch Present: NO
MAC Address: Not Applicable
SFP State: Online
Reads: 0
Writes: 74801
Blocks Read: 0
Blocks Written: 19186170
Queue Full/Busy: 0


Jetzt möchte ich durch die Parameter $SP und $PORT den Link Status der einzelnen SP's prüfen.
Und zwar mit ./check_cla.pl -sp A -p 5
Linuxer
 2008-11-18 14:47
#116357 #116357
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
edit: Nachtrag der Daten war beim Schreiben der Antwort noch nicht erfolgt ;o)

Mir scheint da ein Logikproblem zu existieren.

Wenn Du eine Zeile ausgeben lassen willst, wenn ein Kriterium zutrifft, warum springst Du mit 'next' zur nächsten Zeile? Du weißt, was 'next' macht?

perldoc -f next

Die beiden Kriterien, die Du aufführst, schließen sich gegenseitig aus. Das ist so gewollt?

Die Einrückung des Codes sollte dringend überarbeitet werden; siehe perlstyle.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2008-11-18 14:55
#116358 #116358
hi,

also ich möchte gerne über das Script mit den Parametern $SP und $PORT den Link Status überprüfen. Und zwar nur den, den ich als Parameter mitgebe.

z. B. check_cla.pl -sp A -p 4

Jetzt soll nur der SP A mit dem Port 4 prüfen.
Also die Bedingungen sind SP = A und Port = 4.

Ob ich das nun mit next mache, weiß ich nicht genau.

Oder wie kann ich das machen?
Gast Gast
 2008-11-18 14:56
#116359 #116359
ich glaube mit next geht das nicht, habe mich da verlesen
Linuxer
 2008-11-18 14:58
#116360 #116360
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Das hier ist eine mögliche Lösung:

Es wird block-/abschnittsweise eingelesen und der vordefinierte Regex auf den Block angewandt. Dabei ist zu beachten, dass die Modifier /x und /s verwendet werden.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/perl
use strict;
use warnings;

my ( $sp, $port ) = qw( A 5 );

# perldoc perlretut; perldoc perlrequick; perldoc perlre
my $regex = qr{

        SP\sName:\sSP\s\Q$sp\E          \s+
        SP\sPort\sID:\s\Q$port\E        \s+
        .*
        Link\sStatus:\s(\S+)            \s+
}sx;

{
        # perldoc perlvar
        local $/ = "\n\n";

        while ( my $block = <DATA> ) {

                if ( $block =~ $regex ) {
                        print "Link Status: $1\n";
                }
        }
}

__DATA__

SP Name: SP A
SP Port ID: 4
SP UID: 50:06:01:60:C1:E0:2B:7A:50:06:01:60:41:E0:2B:7A
Link Status: Up
Port Status: Online
Switch Present: YES
Switch UID: 10:00:00:05:1E:03:D9:16:20:07:00:05:1E:03:D9:16
SP Source ID: 67328
MAC Address: Not Applicable
SFP State: Online
Reads: 3064353
Writes: 17936913
Blocks Read: 103971645
Blocks Written: 867380028
Queue Full/Busy: 0

SP Name: SP A
SP Port ID: 5
SP UID: 50:06:01:60:C1:E0:2B:7A:50:06:01:61:41:E0:2B:7A
Link Status: Down
Port Status: Online
Switch Present: NO
MAC Address: Not Applicable
SFP State: Online
Reads: 0
Writes: 74801
Blocks Read: 0
Blocks Written: 19186170
Queue Full/Busy: 0
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
renee
 2008-11-18 15:01
#116361 #116361
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

GetOptions(
  'sp=s' => \my $sp,
  'p=n'   => \my $port,
);

my $file = 'file.txt';

open my $fh, '<', $file or die $!;
{
    local $/ = "\n\n";
    while(my $block = <$fh> ){
        next unless index( $block, 'SP Name: SP ' . $sp ) != -1  and
                    index( $block, 'SP Port ID: ' . $port ) != -1;
        my ($status) = $block =~ /Link Status: (\w+)/;
        print "Link status for SP $sp (Port $port): $status\n";
    }
}
close $fh;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2008-11-18 15:25
#116363 #116363
leider bekomme ich keine Ausgabe.

ich habe $SP = $ARGV[] und $PORT = $ARGV[] definiert.

hat das eine Auswirkung?
renee
 2008-11-18 15:34
#116365 #116365
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Gast+2008-11-18 14:25:16--
leider bekomme ich keine Ausgabe.

ich habe $SP = $ARGV[] und $PORT = $ARGV[] definiert.

hat das eine Auswirkung?


Wobei bekommst Du keine Ausgabe?? Bei meinem Code? $sp und $port wird durch die Funktion GetOptions gesetzt. GetOptions leert dabei @ARGV soweit Parameter angegeben wurden.

Edit: Zeig doch mal Code wie Du es jetzt gemacht hast.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2008-11-18 14:19.