Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Wie kann ich das realisieren?

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.07.2003
    Beiträge
    13

    Wie kann ich das realisieren?

    hallo zusammen,

    ich hab noch nie nen 'richtiges' shell script geschrieben, bräuchte aber jetzt ne lösung für mein problem

    ich habe eine textfile mit folgendem aubau
    Code:
    befehl1    wert1
    befehl1    wert2
    befehl1    wert3
       .                 .
       .                 .
       .                 .
    wbefehl   variable (-> hätte den z.b. wert1 oder wert2 etc)
    ich hab also z.b. ein script mit 11 Zeilen, die ersten 10 zeilen beginnen jeweils befehl1, dann kommt ein leerzeichen und dann der entsprechende wert (wert1 - wert10). die 11. zeile beginnt mit 'wbefehl', der wert der variable kann einen dieser 10 werte (wert1 - wert10) annehmen.

    jetzt möchte ich aus der textfile den aktuellen wert der variable ermitteln, diese soll dann in den zeilen davor gesucht werden, um dann den wert der vorherigen zeile zu ermitteln

    im bespiel von oben wäre das z.b. so

    Code:
    befehl1    wert1
    befehl1    wert2
    befehl1    wert3
       .                 .
       .                 .
       .                 .
    wbefehl   wert3
    das für mich wichtige wort wäre in diesem fall wert2

    versteht ihr mich? ...ich weiss, mit erklären hab ich es nicht so

    kann mir trotzdem jemand helfen?

    thx

    EDIT: hab da schon in den linuxforen angefragt und auch antwort bekommen, aber da blicke ich nicht durch
    Folgende Lösung ist zwar nicht sehr effizient, aber recht anschaulich: grep -B1 "^b.*`tail -1 [datei] | cut -d " " -f 2`" [datei] | head -1 | cut -d " " -f 2.
    gibts ne lösung, die ich verstehe bzw könnt ihr mir helfen das zu verstehen?

    thx

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.07.2003
    Beiträge
    147
    PHP-Code:
    grep -B1 "^b.*`tail -1 [datei] | cut -d " " -f 2`" [datei] | head -cut -" " -f 2. 
    ok. gehen wir das mal durch:

    PHP-Code:
    `tail -1 [datei] | cut -d " " -f 2
    dieser Teil des Statements wird als 1. interpretiert, und dann in das andere Statement eingesetzt.

    tail -1 gibt die letzte Zeile des Files aus (wbefehl wert3)

    cut -d " " -f2 trennt wbefehl von wert3. (-d " " gibt den Trenner an - ein einfacher Space; -f2 bedeutet, dass die 2. Spalte (wert3) in den Outputstream geschriebe werden soll.

    damit kann die expression schon mal vereinfacht werden:

    PHP-Code:
    grep -B1 "^b.*wert3" [datei] | head -cut -" " -f 2. 
    grep gibt nun alle Zeilen aus, die mit "b" beginnen und "wert3" enthalten. "-B1" bedeutet, dass auch eine Zeile davor ausgegebwen werden soll (also die Zeile mit wert2).

    head -1 schneidet nun alles nach der 1. Zeile weg. es bleibt also nur noch die zeile mit wert2.

    cut trennt nun wieder zwischen befehl und wert und gibt den Wert aus.

    mfg

    c.

  3. #3
    Registrierter Benutzer
    Registriert seit
    30.07.2003
    Beiträge
    13
    super erklärung...besten dank

  4. #4
    Registrierter Benutzer
    Registriert seit
    30.07.2003
    Beiträge
    13
    eins habe ich nicht brücksichtigt...

    wenn ich mit
    PHP-Code:
    grep "^b.*wert3" [datei
    die erste zeile ermittle, gibt mir B1 natürlich immer die erste Zeile aus. In diesem Fall wäre für mich nicht die Zeile davor, sondern die vorletzte Zeile der Textdatei interessant. Geht das vielleicht auch?

Lesezeichen

Berechtigungen

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