Anzeige:
Ergebnis 1 bis 3 von 3

Thema: [Perl] Probleme mit split

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Beiträge
    21

    [Perl] Probleme mit split

    Hallo,

    ich möchte über ein Perlskript die Ausgabe des UNIX Befehls "df" auswerten. Dazu habe ich folgenden Code:
    Code:
    my $COUNT = 0;
    my @FS = ();
    
    open(DF, "df |") or die "Fehler beim Forken von: $!\n";
    while(<DF>){
            if("$COUNT" gt 0){
                    my @TMP = split(/ /, $_);
                    push(@FS, $TMP[0]);
            }
            $COUNT++;
    }
    close(DF);
    Mit diesem Konstrukt bekomme ich die Dateisysteme, also die erste Spalte von "df", in den Array @FS. Mein eigentliches Ziel ist es aber die letzte Spalte von "df", also die Mountpoints, in den Array zu bekommen.

    Ich habe bei split ja als Trennzeichen ein Leerzeichen angegeben, aber die Leerzeichen bis zur zweiten Spalte von "df" sind ja variabel, also komme ich so nicht an die letzte Spalte ran. Zur Veranschaulichung nochmal die Ausgabe von "df":
    Code:
    Dateisystem          1K-Blöcke   Benutzt Verfügbar Ben% Eingehängt auf
    /dev/sda3              2016044    145808   1767824   8% /
    Kann mir da jemand weiterhelfen?

    Btw, ich hole mir in meinem Skript die Mountpoints noch durch eine zweite Schleife über "mount". Hier sind ja die Felder immer nur mit einem Leerzeichen getrennt. Aber ich würde gerne wissen, wie man die letzte Spalte schon bei "df" extrahiert.

    Danke und Gruß,
    pertze

  2. #2
    Registrierter Benutzer
    Registriert seit
    08.04.2005
    Beiträge
    18

    RegEx!

    Hi,

    ich denke da kommst du mit Split nicht weiter, aber mit regulären Ausdrücken. Falls du die nicht kennst: Damit kann man Muster beschreiben, in diesem Fall bräuchte man also ein Muster dass den letzten Teil der Ausgabe erkennt. Das müsste ungefähr so aussehen:

    $_ =~ /(\S*)$/

    Erklärung: Durch die Klammern wird das gefundene in die Variable $1 geschrieben, und \S sagt dass das zu findende kein Whitespace sein soll (hoffe du hast sowas nicht in deinen Mountpoints) und durch den Stern nimmt er alle die er kriegen kann bis zum Zeilenende. Hier der komplette Code, bei mir funzt das so:

    Code:
    #!/usr/bin/perl -w
    
    my $COUNT = 0;
    my @FS = ();
    
    open(DF, "df |") or die "Fehler beim Forken von: $!\n";
    while(<DF>){
        $_ =~/(\S*)$/;
        print "Zeile: $_ -> $1\n";
    }
    close(DF);
    Schönes WE!
    Michael

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Beiträge
    21
    Wow Vielen Dank, funktioniert!
    Das nenn ich effektiv. Ich sehe schon, ich hab noch viel zu lernen bei Perl

    Gruß,
    pertze

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •