Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Schleifenprozess mit awk mit Variablenübergabe

  1. #1
    M. Quad
    Gast

    Schleifenprozess mit awk mit Variablenübergabe

    Hallo liebe Leute,

    ich versuche seit längerer Zeit eine etwas elegantere Lösung für mein Problem zu erstellen. Leider bin ich dabei nicht erfolgreich gewesen und könnte Hilfe gebrauchen.

    Problemstellung:
    Ein Tool wertet mir eine Reihe von Dateien aus und schreibt diese nach und nach in eine einzige Datei. Der Inhalt der Dateien ist dabei grundsätzlich, bis auf die erste Spalte, unterschiedlich. Damit ist gemeint, dass sich die Werte der ersten Spalte regelmässig wiederholen.

    Beispiel: Quelldatei
    Spalte 1 Spalte 2 Spalte 3 Spalte 4
    2354-----444------555------666
    3456-----777------888------999
    5432-----1000-----323------645
    ...
    2354-----111------222------333
    3456-----123 -----234------345
    5432-----1205-----456------567
    ...

    Das von mir angestrebte awk Skript soll die Quelldatei so analysieren, dass immer die Zeile komplett ausgeschrieben wird, in der sich in Spalte 2 das Maximum befindet - ! Allerdings ! - in Abhänigkeit von der Spalte 1.
    Das soll bedeuten; die Zieldatei soll folgendes Ergebnis aufweisen:

    Zieldatei
    Spalte 1 Spalte 2 Spalte 3 Spalte 4
    2354-----444------555------666
    3456-----777------888------999
    5432-----1205-----456------567

    Ziel: Für jeden Wert in Spalte 1 soll einmalig das Maximum in Spalte 2 ermittelt werden.

    Mein bisheriges Skript ähnelt eher einem Batchkkommando mit furchtbar vielen Aufrufen, da ich die Quelldatei erst noch sortiert und geteilt habe um dann das Maximum zu bestimmen und um letztendlich wieder alles zusammen zu fahren. Leider sind mir die meisten Beispiele etwas zu kryptisch, als das ich diese sofort verstehe.

    Für eine Idee oder Hilfestellung wäre ich Euch sehr dankbar.

    MFG m.quad

  2. #2
    Registrierter Benutzer
    Registriert seit
    26.12.2002
    Ort
    Matrix
    Beiträge
    194
    $ cat bla
    2354-----444------555------666
    3456-----777------888------999
    5432-----1000-----323------645
    2354-----111------222------333
    3456-----123 -----234------345
    5432-----1205-----456------567

    $ sort -nr bla | awk -F"-" '{if(I != $1) {print $0; I=$1}}'
    5432-----1205-----456------567
    3456-----777------888------999
    2354-----444------555------666


    -j

  3. #3
    M. Quad
    Gast
    Hallo Jasper,

    vielen Dank für die schnelle Antwort. Ich habe allerdings noch ein weiteres Problemchen.

    Quelldatei: Beispiel
    1 2 3
    2 -3 4
    3 4 5
    1 -3 8
    2 4 1
    3 -5 4
    1 4 6
    2 5 4
    3 7 9
    1 1 3
    2 -4 5
    3 6 6

    Kommando
    sort -r BEISPIEL | awk '{if(I != $1) {print $0; I=$1}}' > BEISPIEL_01

    Ergebnis: bisher

    3 7 9
    2 5 4
    1 4 6

    Ergebnis: alternativ gewünscht

    1 -3 8
    2 -4 5
    3 -5 4

    Mein Ziel wäre jedoch auch, nach dem Minimum in der zweiten Spalte zu suchen. Habe jetzt schon ein paar Möglichkeiten versucht, aber ausser Blödsinn ist dabei nicht herumgekommen.

    Wie kann man die if Bedingung umformulieren?

    Danke nochmals.

Lesezeichen

Berechtigungen

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