PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash: von jeder zeiler alle zahlen zw xy und xy addiern



zaunmayrchris
20-08-2005, 15:43
seas;
gleich mal vorweg: bin noch ein kleiner linux-neuling! skripte erstellen find ich äußerst praktisch nur hab ich mir leider ein nicht sehr gutes buch dazu gekauft. (bash 3.0 ge-packt heißt es) - hab mir mittlerweile andere bestellt nur sind die noch am weg und ich bräuchte dringend ein skript das folgendes bewerkstelligen kann:

ich habe einen ordner mit ca. 50 dateien.
aus diesen dateien les ich mal alle zeilen die 'GS' enthalten wie folgt aus: sed -ne '/GS/p' *
nun möchte ich aus dieser liste (so ca. 2000 zeilen oder so) alle zahlen die zwischen dem ersten 'GS ' und dem zweiten ' GS' in der zeile stehen auslesen und einfach zusammenrechnen. (nach dem ersten gs ist ein leerzeichen und vor dem zweiten is auch eins!)

die zeilen sehen ca. so aus:


testetest +1 (10) 510 GS 460 GS
halihaloo (AB) +1 100% (9) 510 GS 460 GS
hihi; was los? (333) 132 GS 150 GS
die zahl 280 möcht ich hier auslesen 264 GS 280 GS
in dieser zeile brächt ich die zahl 260! 264 GS 260 GS

nur wie mach ich das ganze? ich dachte mir das müste irgendwie mid sed gehen. nur mit den internet tuturials komm ich nicht weiter und das bestellte buch kommt erst nächste woche
kann mir da irgendjemand helfen?

cu
CHristoph

klewan
20-08-2005, 16:26
cat 1.txt |awk '{sum +=$(NF-1) } END {print sum}'

zaunmayrchris
20-08-2005, 16:42
cat 1.txt |awk '{sum +=$(NF-1) } END {print sum}'

wow! versteh zwar !!noch!! kein wort von dem was da oben steht, aber es funktioniert.
ich befürchte ja das ich awk sowieso nie kapieren werde. kann ich mit sed eg auch alles machen was man mit awk machen kann?
danke für die schnelle hilfe.

cu
CHristoph

peschmae
20-08-2005, 21:38
ich befürchte ja das ich awk sowieso nie kapieren werde. kann ich mit sed eg auch alles machen was man mit awk machen kann?


Nein, natürlich kann sed nicht alles was awk kann - sonst gäbe es das wohl nicht ;)
Awk kann gewisse Sachen einfach sehr gut - insbesondere die Verarbeitung von sich wiederholenden gleich aufgebauten Datensätzen. Ausserdem ist es eine "richtige" Programmiersprache.

Ich denke wenn du sed *wirklich* kapiert hast ist AWK ein Kinderspiel - vor allem weil die Befehle da nur das machen was du sagst und nicht ein "p" wie in Sed z.B. zwar den Pattern-Space ausgibt aber dann auch gleich bei der nächsten Zeile weiterfährt, was du eventuell nicht willst... :D

MfG Peschmä

Jasper
20-08-2005, 22:08
cat 1.txt |awk '{sum +=$(NF-1) } END {print sum}'


wobei bei der lösung zu beachten ist, dass immer das vorletzte feld addiert wird und nicht zwingend der wert, der zwischen den letzten beiden 'GS' steht.


-j

zaunmayrchris
21-08-2005, 03:03
wobei bei der lösung zu beachten ist, dass immer das vorletzte feld addiert wird und nicht zwingend der wert, der zwischen den letzten beiden 'GS' steht.


ja ich weiß; aber das war genau was ich wollte :D (es is eh immer das vorletzte feld!
so kam ich auch schnell drauf wie ich mal die 3. vorletzte spalte addiern kann!