Script um bestimme Zeilen einer Datei auszulesen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Midyr, 22.01.2015.

  1. Midyr

    Midyr Grünschnabel

    Dabei seit:
    22.01.2015
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo,

    ich habe u.g Textfile.

    Daraus möchte ich für jeden Block (Beginnend mit id) eine Zeile mit der id, dem namen und den 2-4 WWPN in eine andere Datei speichern.
    Der String "port_count" gibt die Anzahl der WWPNs an


    Wie kann ich das am Einfachsten per Bash bewerkstelligen?

    Gruß und Danke Frank

    Code:
    id 0
    name sasadad
    port_count 2
    type asdasd
    mask 1111111111111111111111111111111111111111111111111111111111111111
    iogrp_count 4
    status degraded
    WWPN 555555555
    node_logged_in_count 0
    state offline
    WWPN 4444444
    node_logged_in_count 1
    state degraded
    id 1
    name sdfsdfsdfdsf
    port_count 2
    type generic
    mask 1111111111111111111111111111111111111111111111111111111111111111
    iogrp_count 4
    status degraded
    WWPN 5656565656
    node_logged_in_count 0
    state offline
    WWPN 45654654
    node_logged_in_count 1
    state degraded
    id 2
    name 5645654
    port_count 2
    type generic
    mask 1111111111111111111111111111111111111111111111111111111111111111
    iogrp_count 4
    status degraded
    WWPN 565465
    node_logged_in_count 0
    state offline
    WWPN 645645
    node_logged_in_count 1
    state degraded
    id 3
    name asdasdasd
    port_count 6
    type generic
    mask 1111111111111111111111111111111111111111111111111111111111111111
    iogrp_count 4
    status degraded
    WWPN sdfdsfdsf
    node_logged_in_count 1
    state degraded
    WWPN fsdfdfdsfsd
    node_logged_in_count 1
    state degraded
    WWPN sdfsdfdsfds
    node_logged_in_count 1
    state degraded
    WWPN 64565656
    node_logged_in_count 1
    state degraded
    WWPN 466456
    node_logged_in_count 1
    state degraded
    WWPN dasdasdas
    node_logged_in_count 1
    state degraded
    
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    Datei mit Schleife $Zeile für $Zeile auslesen, Test ob "id" in $Zeile vorkommt, wenn ja, $Variable mit Wert von id belegen und $Zeile in Datei $Variable schreiben.
     
  4. Midyr

    Midyr Grünschnabel

    Dabei seit:
    22.01.2015
    Beiträge:
    4
    Zustimmungen:
    0
    Moin,

    danke für die Antwort.

    Wie bekomme ich aber die Zeilen der Datei?
    Meine Versuche mit cat, read line und greppen in einer Schleife sind immer nach dem ersten Fund von id gestoppt

    gruß
     
  5. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    Poste den Versuch doch mal - dann haben wir was handfestes zum debuggen.

    Ach ja -
    Code:
    -Tags wären da gern gesehen, so wegen der Lesbarkeit.
     
  6. Midyr

    Midyr Grünschnabel

    Dabei seit:
    22.01.2015
    Beiträge:
    4
    Zustimmungen:
    0
     
  7. #6 floyd62, 23.01.2015
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Evtl. einfach in sed: id-Zeile merken (in den Hold-Puffer nehmen), name- und WWPN-Zeilen anhängen, und das Ganze ausgeben, wenn wir das nächste mal über eine id-Zeile stolpern oder ans Dateiende kommen:

    Code:
    sed -n -e 's/id //;Ta;x;s/\n / /g;p;d;:a s/name//;Tb;H;:b s/WWPN//;Tc;H;:c $bd;d;:d x;s/\n / /g;p;'
    
    Wer so etwas wirklich einsetzt, ist vermutlich selbst schuld ;-)

    A.
     
  8. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    "einfach in sed" - der war gut...

    *rofl*

    In Perl bekommt man das sicher auch in eine Zeile, aber manchmal ist ein Script doch irgendwie lesbarer und ggf. auch besser zu warten...
     
  9. Midyr

    Midyr Grünschnabel

    Dabei seit:
    22.01.2015
    Beiträge:
    4
    Zustimmungen:
    0
    Unglaublich aber wahr, der Buchstabensalat funktioniert:devil:

    Vielen Dank

    Midyr
     
  10. #9 tgruene, 28.01.2015
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Das ist aber kein schoener sed-Code: 'T' setzt labels, und das ist doch bei einem echten Stream nicht moeglich: wenn die Zeile vorbei ist, ist sie vorbei. Ist laut Doku auch spezifisch fuer GNU sed.
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 floyd62, 14.02.2015
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi tgruene,

    kann nur zustimmen:

    - "schön" ist anders
    - 'T' ist GNU-sed-spezifisch, läuft ggf. also nicht auf anderen Betriebssystemen ausser Linux.

    Das war also nur ein Schnellschuss zur einmaligen Verwendung, daher auch meine o.a. Bemerkung ("Wer so etwas wirklich einsetzt, ...")

    Mit ein bisschen Überlegung liesse sich das ein bisschen optimieren und ohne Verwendung von GNU-Eigenheiten z.B. umschreiben zu
    Code:
    sed -n -e 's/id //;tb;s/name//;ta;s/WWPN//;ta;$!d;bb;:a H;d;:b x;s/\n / /g;/^./p;'
    
    und falls die Absicht besteht, das in Skriptform für die Ewigkeit aufzubewahren, könnte man das dann ausformulieren zu
    Code:
    sed -n -e '
                    s/id //;        # id-Zeile finden, Keyword löschen
                    tb;             # weiter bei :b, falls id
    
                    s/name//;       # name finden
                    ta;             # weiter bei :a, falls name
    
                    s/WWPN//;       # WWPN
                    ta;             # falls WWPN, auch weiter bei :a
    
                    $!d;            # alles andere löschen und weiter zur nächsten
                                    # Zeile (d), ausser am Dateiende
                    bb;             # weiter bei b (zur Verarbeitung der letzten Zeile)
    
            :a
                    H;              # aktuell gefundene Zeile an hold-Buffer anhängen
                                    # (Keywords wurden bereits entfernt)
                    d;              # aktuelle Zeile löschen, nächste einlesen
    
            :b
                    x;              # Hold-Buffer mit Pattern-Space austauschen
                    s/\n / /g;      # ersetze NLs mit Spaces
                    /^./p;          # Ausgabe, falls irgendwelche Daten (vermeidet
                                    #Leerzeile bei erstem 'id')
    '
    
    Aber natürlich kann mal Labels in sed-Skripten (auch bei Nicht-GNU-sed-Versionen) verwenden - die beziehen sich auch nicht auf Positionen innerhalb der zu verarbeitenden Daten im Eingabe-Stream, sondern dienen nur zum Anspringen der Befehle innerhalb des sed-Skripts ...

    Grüsse,
    A.
     
  13. #11 Spröde, 14.02.2015
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    :D

    Um so schöner ist der kommentierte Code in Post #10. Danke dafür an floyd62.
     
Thema:

Script um bestimme Zeilen einer Datei auszulesen

Die Seite wird geladen...

Script um bestimme Zeilen einer Datei auszulesen - Ähnliche Themen

  1. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  2. Bashscript aus Debian6 läuft nicht auf Debian7

    Bashscript aus Debian6 läuft nicht auf Debian7: Hallo an alle, nachdem ich ein Skript von squeeze auf wheezy kopiert habe und ausführte, erschienen gleich wilde Fehlermeldungen, nach denen ich...
  3. Shell Script Problem

    Shell Script Problem: Hallo zusammen, ich arbeite momentan mit einem Plagiat Tool, die ich über Git Bash ausführe. Es wird im Endeffekt ein Link generiert, die ich...
  4. Externes Programm mit Script ausführen?

    Externes Programm mit Script ausführen?: Hallo, ich würde gern ein Script zum klonen von festplatten schreiben z.B. mit dem Programm Mondo Rescue. Ist es möglich externen Programmen...
  5. sh Script zum Autostart

    sh Script zum Autostart: hallo liebe Mitglieder, wenn ich unter Linux eins meiner Shell Skripte im Autostart haben will nutze ich immer die @reboot Funktion im crontab....