Am Mittwoch, 30. August 2006 01:07 schrieb Achim Schäfer:
Am Montag, 28. August 2006 09:44 schrieb Wolfgang Golder:
ich habe hier ein Textfile das folgendermaßen formatiert ist:
#################### Text Zeile 1 Text Zeile 2 Text Zeile 3 Text Zeile 4 ... Text Zeile n #################### Text Zeile 1 ... Text Zeile n #################### ...
Die Anzahl der Textzeilen zwischen den ###... ist immer verschieden. [...] Ich würde aber zu einer Fundstelle immer gerne den gesamten Block zwischen den ###... sehen. Unabhängig davon wieviel Zeilen es sind.
Hallo Wolfgang,
ich habe bisher noch nicht sehr viel mir awk gemacht und fand das Problem spannend. Die Aussage der anderen, dass ein solches Problem doch ganz einfach sein sollte, hat den Ehrgeiz geweckt.
Bisher hatte ich immer nur das Problem, ab einer definierten Zeile bis zu einer anderen definierten Zeile zu suchen. Du aber möchtest, nachdem Du das Suchwort gefunden hast, den gesamten Block, also auch die Zeilen vor der Zeile mit dem Suchwort ausgegeben haben. Außerdem gibt es bei Dir keine Unterschiedlichen Markierungen für Anfang und Ende.
Wenn ich es richtig verstanden habe, hilft Dir auch die von Bernd geschriebene Lösung (sed -n '/Iowa/,/Montana/p) nicht weiter, weil der gesuchte Block eben nicht durch spezielle Anfangs- und Endzeilen sondern durch eine Zeile in der Mitte des Blocks charakterisiert ist.
Diese Tatsachen fand ich im ersten Moment erschwerend, aber ich habe folgendes awk-Skript geschrieben:
----- BEGIN { start=0; gefunden=0; inhalt=""; }
{ if ($0 ~ /####################/ && start==1) { if (gefunden==0) {inhalt="";} else {start=0} } }
{ if ($0 ~ /####################/ && gefunden==0) { start=1; } else { if (start==1) { inhalt=inhalt $0 "\n"; if ($0 ~ /Suchwort/) { gefunden=1 } } } }
END { print inhalt; } -----
Bestimmt geht das noch besser und es hat auch noch einen kleinen Nachteil: Am Ende wird immer eine zusätzliche Leerzeile ausgegeben. Wegen begrenzter Kenntnisse im Zusammenspiel mit Müdigkeit, habe ich das jetzt nicht mehr beseitigt.
awk kennt auch arrays. man spart sich dann die stringkonkatenation, die u.U. doch zeitwendig sein kann. Auch das Problem mit der finalen Leerzeile wird damit vermieden. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer