Anzeige:
Ergebnis 1 bis 7 von 7

Thema: awk-"Variablen" in Shell Arrays speichern

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.10.2000
    Beiträge
    78

    awk-"Variablen" in Shell Arrays speichern

    Hallo,
    wie kann ich "awk Variablen ($1 $2 ...) in Shellvariablen bzw. Arrays speichern? Für den umgekehrten Weg Shell -> awk habe ich einige Möglichkeiten gefunden.

    Ich kann natürlich für jede Variable den gleichen Aufruf starten, aber das sollte doch einfacher gehen !?
    Code:
    array1[i]=`sed -n 13p response.txt | sed 's/$.//g'  |  sed 's/ //g' | awk -F\| '{ print $1  }'`
    array2[i]=`sed -n 13p response.txt | sed 's/$.//g'  |  sed 's/ //g' | awk -F\| '{ print $2  }'`
    array3[i]=`sed -n 13p response.txt | sed 's/$.//g'  |  sed 's/ //g' | awk -F\| '{ print $3  }'`
    array4[i]=`sed -n 13p response.txt | sed 's/$.//g'  |  sed 's/ //g' | awk -F\| '{ print $4  }'`
    Angenommen ich möchte alles in einem Array speichern. Warum funktioniert folgendes nicht, bzw. ergibt nur ein Element? Von der Ausgabe ist es doch identisch mit array=( eins zwei drei vier ), welches vier Elemente enthällt.

    Code:
    array=`sed -n 13p response.txt | sed 's/$.//g'  |  sed 's/ //g' | awk -F\| '{ print "(" $1, $2, $3, $4 ")" }'
    Gruß

  2. #2
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von zagadka

    Code:
    array=`sed -n 13p response.txt | sed 's/$.//g'  |  sed 's/ //g' | awk -F\| '{ print "(" $1, $2, $3, $4 ")" }'
    Gruß
    Ich würde mal das F weglassen + eine Pipe ist zu viel.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.10.2000
    Beiträge
    78
    Zitat Zitat von Romanday
    Ich würde mal das F weglassen + eine Pipe ist zu viel.
    Wenn ich das F weglasse, wird er mir die Zeile nicht mehr splitten, oder irre ich mich? Trennzeichen ist das "|"


    Dima(Rus) | 63 | 16 | 17
    Predator | 27 | 10 | 15
    Scorn | 33 | 15 | 7
    Ossian Puurokoura | 35 | 16
    ....

    Gruß

  4. #4
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von zagadka
    Wenn ich das F weglasse, wird er mir die Zeile nicht mehr splitten, oder irre ich mich? Trennzeichen ist das "|"


    Dima(Rus) | 63 | 16 | 17
    Predator | 27 | 10 | 15
    Scorn | 33 | 15 | 7
    Ossian Puurokoura | 35 | 16
    ....

    Gruß
    Stimmt. Sorry f steht ja für File und nicht F.
    Ich weiß ja nicht was das für ein Array werden soll (welche Sprache?).
    Bei der Shell (Bash) ist doch Space der Trenner.
    Ich blaub auch nicht, dass Du x pipen mußt für den Ergebnis.
    Häng doch mal deine response.txt an das nächste Posting.
    >> Um es vorwegzunehmen. Probleme wird es immer bei Sonderzeichen
    geben... Es ist also günstiger das gleich in Perl, Python oder PHP zu schreiben.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  5. #5
    Registrierter Benutzer
    Registriert seit
    20.10.2000
    Beiträge
    78
    Zitat Zitat von Romanday
    Stimmt. Sorry f steht ja für File und nicht F.
    Ich weiß ja nicht was das für ein Array werden soll (welche Sprache?).
    Bei der Shell (Bash) ist doch Space der Trenner.
    Ich blaub auch nicht, dass Du x pipen mußt für den Ergebnis.
    Häng doch mal deine response.txt an das nächste Posting.
    >> Um es vorwegzunehmen. Probleme wird es immer bei Sonderzeichen
    geben... Es ist also günstiger das gleich in Perl, Python oder PHP zu schreiben.
    Das sollte ein Bash Array werden. Ich hab das jetzt auf die umständliche Weise gemacht - kann aber auch so bleiben.
    Code:
    p_players[i]=`sed -n $zeile\p $serverresponse | sed 's/$.//g' | sed 's/ //g' | awk -F\| '{ print $1 }'`
    p_ping[i]=`sed -n $zeile\p $serverresponse | sed 's/$.//g' | sed 's/ //g' | awk -F\| '{ print $2 }'`
    p_time[i]=`sed -n $zeile\p $serverresponse | sed 's/$.//g' | sed 's/ //g' | awk -F\| '{ print $3 }'`
    p_score[i]=`sed -n $zeile\p $serverresponse | sed 's/$.//g' | sed 's/ //g' | awk -F\| '{ print $4 }'
    Den Text häng ich trotzdem mal an.

    Gruß

  6. #6
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Hast Du mal Sonderzeichen in deine Datei geschrieben?
    &;#'~{}[]"*#/\\t\v\r
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.10.2000
    Beiträge
    78
    Zitat Zitat von Romanday
    Hast Du mal Sonderzeichen in deine Datei geschrieben?
    &;#'~{}[]"*#/\\t\v\r
    Die Datei selbst wird duch das angehängte Skript generiert, indem Colorcodes (Namen FarCry Server) und Sonderzeichen drin sind, die werden duch das Skript rausgefiltert und weiterverarbeitet.

    Noch einmal danke für Deine Hilfe, aber das funktioniert soweit ganz gut, und ich lass es jetzt lieber ein wenig ausführlicher.

    Mit dem Skript bekomme ich alle Daten von meinem FarCry Server in Variablen und werde via VDR über Buddys oder guter Serverbelegung oder. Absturz etc. informiert.

    Gruß, Rupert

Lesezeichen

Berechtigungen

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