Anzeige:
Ergebnis 1 bis 12 von 12

Thema: AWK Frage (Anfänger)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von hand44 Beitrag anzeigen
    Äh.. natürlich nur, wenn das nicht so lang ist. Ich glaube ja immer noch, dass das nur ein paar Zeilen sind...)
    Hab gerade mal ein wenig rumprobiert.
    So einfach ist das nicht.
    Reicht dir auch eine PHP Lösung?
    Geändert von Romanday (20-02-2007 um 09:08 Uhr)
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  2. #2
    Registrierter Benutzer
    Registriert seit
    17.02.2007
    Beiträge
    7
    Hallo Romanday,
    danke für dein Angebot . PHP halte ich nicht für so geeignet, da das Prog auch auf einem normalen Windows-Rechner laufen soll. Ich weiß auch nicht, ob PHP mit großen Textdateien so gut klar kommt wie AWK (30 Mbyte und größer).

    Deshalb nochmal zu AWK. Ich denke, ich hätte einen Ansatz, wenn ich den Inhalt der jeweils nächsten Zeile abfragen könnte. Das hab ich aber bislang nicht hinbekommen. Also zB die Schleife
    if($0 == "irgendwas") oder if($0 ~ "irgendwas")
    wurde für jede Zeile ausgeführt, weil der Ausdruck $0 == "irgendwas" wohl immer wahr ist. Das kapier ich nicht so ganz. Weiß jemand, wie ich eine funktionierende Schleife der Art bauen könnte für das Beispiel oben? Also eine korrigierte Version von dieser:
    if($0 ~ "Obst")

    Danke,
    sileem
    Geändert von hand44 (19-02-2007 um 08:20 Uhr)

  3. #3
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Moin moin,
    Zitat Zitat von hand44 Beitrag anzeigen
    Deshalb nochmal zu AWK. Ich denke, ich hätte einen Ansatz, wenn ich den Inhalt der jeweils nächsten Zeile abfragen könnte. Das hab ich aber bislang nicht hinbekommen. Also zB die Schleife
    if($0 == "irgendwas") oder if($0 ~ "irgendwas")
    wurde für jede Zeile ausgeführt, weil der Ausdruck $0 == "irgendwas" wohl immer wahr ist. Das kapier ich nicht so ganz. Weiß jemand, wie ich eine funktionierende Schleife der Art bauen könnte für das Beispiel oben? Also eine korrigierte Version von dieser:
    if($0 ~ "Obst")
    wenn ich das richtig sehe, dann ist z.B. bei der ersten Zeile Deiner Liste
    $0 "Gruppe: Obst"
    $1 "Gruppe:"
    $2 "Obst"
    frag also lieber if($1=="Gruppe:") und dann, ob Du $2 schonmal hattest;-)

    Ist eigentlich gewährleistet, daß die Liste zmindest den Gruppen nach sortiert ist?
    MfG,
    Rainer
    There's nothing a good whack with a hammer won't fix!

  4. #4
    Registrierter Benutzer
    Registriert seit
    17.02.2007
    Beiträge
    7
    Moin!
    Durch den letzten Tipp und durch Ausprobieren bin ich jetzt noch einen Schritt weiter gekommen: Der Code:

    BEGIN {
    obst=1;
    gemu=1;
    sprit=1;
    }

    {
    if($1=="Gruppe:")
    {
    if(obst==1 && $2=="Obst")
    print "Obstsorten";
    }
    {
    if(obst==1 && $2=="Obst")
    obst=0;
    }
    {
    if(gemu==1 && $2=="Gemuese")
    print "\nGemuesesorten";
    }
    {
    if(gemu==1 && $2=="Gemuese")
    gemu=0;
    }
    }

    sub("Name: ","");

    bringt folgende Ausgabe:

    Obstsorten
    Apfel
    Birne
    Kirsche

    Gemuesesorten
    Karotte
    Kohlrabi
    Tomate

    Jetzt fehlt mir noch die Anzahl der Obst- und Gemüsesorten an der jeweiligen Stelle. Geht das überhaupt?
    Geändert von hand44 (19-02-2007 um 13:22 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.02.2007
    Beiträge
    7
    So. Ich hab's jetzt fast komplett selbst hinbekommen :-). Ich hab nur noch eine letzte kleine Frage. Ich habe eine Eingabe nach der Art:

    Name: 111 222 333 444 555

    Und möchte per print nur ausgeben:
    111 222 333 444 555

    So hab ich's gemacht:
    {
    if($1==Name)
    print $3,$4,$5,$6,$7
    }

    Das Problem ist, dass wenn ich eine Zeile habe wie zB
    Name: 111 222
    sieht die Ausgabe zwar auch brauchbar aus, aber für die überflüssigen Felder wird dann je ein Leerzeichen angehangen.

    Meine Frage lautet also: Ist es direkt möglich, einfach alles rechts ab $3 auszugeben? Egal, wieviele Felder da stehen?

    Gruß und Danke,
    Sileem

  6. #6
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Siehe man tr und wc
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  7. #7
    Registrierter Benutzer
    Registriert seit
    17.02.2007
    Beiträge
    7
    Äh... Uff!

    Trotzdem Danke.

Lesezeichen

Berechtigungen

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