Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
nochmal awk-Programmierung

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
LBS
Gast





BeitragVerfasst am: 10. Sep 2002 10:21   Titel: nochmal awk-Programmierung

Hallo zusammen,

ich will aus einer Datei die folgenden Aufbau hat:

name1
name2
name3
name4
.
.
.

Eine Ausgabe die folgendermaßen aussieht:

'name1','name2','name3','name4'

(ganz am Ende darf kein Komma stehen!)

Nun habe ich das ganze Folgendermaßen erledigt:

code:

awk "{ print \"'\"; print $1; print \"'\" ; print \" ,\" }" text >text_neu
anz=`cat text_neu | wc -l | sed 's/ *//g'`
UID=`sed -n -e "$anz !p" text_neu | tr -d '
'`



Der awk schreibt in die Datei text_neu vor jedem namen eine Zeile mit ' und nach jedem Namen eine Zeile mit ',
das Problem, am Ende der Datei ist dann noch ein Komma zu viel.
in der Variablen anz steht die Anzahl der Zeilen und mit dem zweiten sed schneide ich die letzte Zeile weg.
Der tr schneidet mir noch die Curage-Return-Zeichen weg und ich erhalte die gewollte Ausgabe.

Allerdings scheint mir das irgendwie recht umständlich, vielleicht ist hier ja ein Shell-Krebs unterwegs, der das eleganter lösen könnte,

danke

cu

LBS
___________________________

Linux Based System
 

Jochen
Gast





BeitragVerfasst am: 10. Sep 2002 14:24   Titel: Re: nochmal awk-Programmierung

Da wird der awk aber schwer unterschätzt!
code:

awk '
{ zeile = zeile "'\'','\''" $0 }
END { print substr (zeile, 3) "'\''" }' text


In der Variablen zeile werden die Eingabezeilen gesammelt, getrennt durch "','". (Das Herumgepfriemele mit dem Hochkomma und dem Backslash ist notwendig, weil die Shell mit dem Hochkomma das Ende des Quotings, das mit "awk '" beginnt, sieht.) Zum Schluss wird die Zeile ausgeben. Da aber am Anfang zuviel steht, wird mittels substr nur der Teil der Zeichnekette ab dem 3. Zeichen inklusive (dem zweiten ') augegeben, plus dem hinten noch fehlenden '.

Ok so?

Jochen
 

LBS
Gast





BeitragVerfasst am: 11. Sep 2002 11:21   Titel: Re: nochmal awk-Programmierung

Nie würde ich den awk unterschätzen !!!
Das Skript klappt wunderbar, aber noch zwei Fragen dazu:
Wieso steht hier $0 und nicht $1. Ich hätte gedacht mit $1 hol ich mir den ersten Ausdruck aus einer Zeile.
Und 2tens, wo ist das Return Zeichen hin? Ich hab es ja extra mit dem tr rausgefiltert?

Danke

cu
 

LBS
Gast





BeitragVerfasst am: 11. Sep 2002 11:24   Titel: Re: nochmal awk-Programmierung

Noch was, hab ich in der Eile vergessen,

Wieso brauche ich hier kein BEGIN? Soviel ich weiß (anscheinend zu wenig), werden Anweisungen für den awk die vor dem Durchlauf passieren zwischen BEGIN und END angegeben?

danke

cu
 

Jochen
Gast





BeitragVerfasst am: 12. Sep 2002 7:54   Titel: Re: nochmal awk-Programmierung

$0 steht für die gesamte Eingabezeile. Es könnte ja sein, dass in einer Zeile Deiner Eingabedatei "Peter Müller" steht. Wenn Du $1 verwendest, würde nur "Peter" übernommen werden; ein Blank ist ja per Default Feldtrenner. Bei $0 wird "Peter Müller" übernommen; die ganze Eingabezeile halt. Du kannst es also gerne so anpassen, wie es in Deinem Fall am besten hinkommt.

Die Newlines verschwinden, da für den awk das Newline der Satz-Trenner (Record Separator, in der Variablen RS definiert) ist. Ein Satztrenner ist per Definition niemals Bestandteil eines Satzes, also wird mittels $0 immer nur die Eingabezeile ohne Newline in der Variablen zeile aufaddiert. In der Ausgabe wird durch das print-Kommando nur noch zum Schluss eines drangehängt.

BEGIN und END sind lediglich spezielle Auswahlbedingungen. Die Aktion, die auf BEGIN folgt, wird ausgeführt, bevor auch nur die erste Eingabedatei bearbeitet wird. Dort werden typischerweise Variablen initialisiert oder Tabellenheader ausgegeben. Die Aktion, die auf END folgt, wird ausgeführt, nachdem die letzte Eingabedatei vollständig bearbeitet wurde. Dort werden typischerweise Endergebnisse berechnet und ausgegeben. BEGIN und END bilden keine Klammer; man kann beide oder keins oder auch nur eins von beiden verwenden, je nach Anwendungszweck.

Wenn Du noch weitere Infos zu awk suchst und einigermassen Englisch kannst, würde ich Dir ein "info gawk" empfehlen. Die Online-Doku zum gawk ist wirklich sehr gut.

Noch andere Unklarheiten?

Jochen
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy