Thread String einlesen und nachfolgendes Wort ausgeben (20 answers)
Opened by SCORRPiO at 2014-04-15 10:15

SCORRPiO
 2014-04-15 12:18
#174780 #174780
User since
2014-02-18
13 Artikel
BenutzerIn

user image
Danke klappt soweit ganz gut.

Noch eine Frage hätte ich da:
Die Input Datei enthält 3 Zeilen
Code: (dl )
1
2
3
ioc0 vol_id 0 type IM, 2 phy, 135 GB, state DEGRADED, flags ENABLED RESYNC_IN_PROGRESS
ioc0 phy 0 scsi_id 1 HITACHI HUS153014VLS300 A598, 136 GB, state ONLINE, flags OUT_OF_SYNC
ioc0 phy 2 scsi_id 1 HITACHI ST3300657SS-H A598, 136 GB, state ONLINE, flags OUT_OF_SYNC

Mein Programm liest jedoch nur die 1. Zeile ein und gibt die aus und beendet sich, was müsste ich da noch ändern?
Das Problem ist dass das Programm auch mehrere Zeilen haben kann (oder aber nur 3
Aktueller Programm Code:
more (15.0kb):
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
################################
# Raid status check for nagios #
################################
use strict;
use warnings;
my @Zeilen = ("");
my $status = 3;                 # Wenn kein Status dann 3 (UNKNOWN)
open(DATEN, "<test4") or die "Datei  nicht gefunden\n";
foreach ( my $zeile = <DATEN>) {
        if($zeile =~ m/OPTIMAL/g){
                        exit "0";
                        }
        if($zeile =~ m/ONLINE/g){
        my ($phy) = $zeile =~ /phy\s(\w+)/;
        my ($state) = $zeile =~ /state\s(\w+)/;
        my ($flags) = $zeile =~ /flags\s(\w+)/;
        printf "phy: $phy, state: $state, flags: $flags\n";

        }
        
        elsif($zeile =~ m/RESYNC_IN_PROGRESS/g){
        my ($phy)   = $zeile =~ / \b phy   \s+ (\w+) /x;
        my ($state) = $zeile =~ / \b state \s+ (\w+) /x;
        my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x;
        printf "state: $state, flags: $flags\n";

        }

        elsif($zeile =~ m/MISSING/g){
        my ($phy)   = $zeile =~ / \b phy   \s+ (\w+) /x;
        my ($state) = $zeile =~ / \b state \s+ (\w+) /x;
        my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x;
        printf "phy: $phy, state: $state, flags: $flags\n";

        }

        elsif($zeile =~ m/OUT_OF_SYNC/g){
        my ($phy)   = $zeile =~ / \b phy   \s+ (\w+) /x;
        my ($state) = $zeile =~ / \b state \s+ (\w+) /x;
        my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x;
        printf "phy: $phy, state: $state, flags: $flags\n";

        }

        elsif($zeile =~ m/OFFLINE/g){
        my ($phy)   = $zeile =~ / \b phy   \s+ (\w+) /x;
        my ($state) = $zeile =~ / \b state \s+ (\w+) /x;
        my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x;
        printf "phy: $phy, state: $state, flags: $flags\n";

        }
        else
        {
                printf "UNKNOWN";
        }
}
close(DATEN);

Last edited: 2014-04-15 12:32:42 +0200 (CEST)
Linux User || Perl 5.14

View full thread String einlesen und nachfolgendes Wort ausgeben