PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : awk-"Variablen" in Shell Arrays speichern



zagadka
20-05-2006, 16:06
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 !?


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.



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


Gruß

Romanday
20-05-2006, 19:30
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.

zagadka
20-05-2006, 23:38
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ß

Romanday
21-05-2006, 06:58
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.

zagadka
21-05-2006, 12:10
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.


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ß

Romanday
21-05-2006, 20:58
Hast Du mal Sonderzeichen in deine Datei geschrieben?
&;#'~{}[]"*#/\\t\v\r

zagadka
21-05-2006, 22:16
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