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

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Anzahl von bestimmten Zeichen ermitteln

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





BeitragVerfasst am: 05. Feb 2004 11:12   Titel: Anzahl von bestimmten Zeichen ermitteln

Hallo Leute, beschäftige mich seit Tagen damit, wie man in einem BASH-Script aus einem File die Zeilen ermitteln kann, die eine bestimmte Anzahl eines Zeichens enthalten oder eben nicht enthalten.
Kurz : Ich muß die Zeilen ermitteln die weniger oder mehr als 20 "," enthalten, da diese als Feldtrenner für einen Datenbankimport dienen
z.b. 2. Zeile
O,01/31/04,6:37:07,401B4D13.1A5:17:4517,Unknown,,DO_XXXXX,PO_XXXXXX,xxxxxx,,WSEP spanish boot hindered,DO_GWIA,GWIA,,MIME,hjhvuhxe@xxxx.xx,1,0,4167,0,
I,01/31/04,8:27:21,401B66E9.1A6:18:4518,Unknown,,DO_XXXXX,PO_XXXXXX,xxx,,,p,nis,n,larger,DO_GWIA,GWIA,,MIME,flora.bird_qf@xxxxxxx.xxx.xx,1,0,2267,0,

Ich habe schon verschiedene Dinge ausprobiert wie sed, grep, bin aber zu keinem Ergebnis gekommen.
Bisher hat nur funktioniert, daß ich für die gesamte Datei ermitteln konnte, ob die Gesamtanzahl der "," richtig ist. Dazu hatte ein kluger Mensch einen Einfall:

richtig=`expr $zeilen '*' 20` # Anzahl der Kommata, die vorhanden sein dürfen
# Die nachfolgende Zeile ermittel für <file> die Anzahl bestimmter zeichen <X>
# echo -n `sed < file -e"s/[^X]//g" ` | sed -e"s/ //g" | wc -c
# Mit anderen Worten: die wirkliche Anzahl von Kommata im Temporärfile
falsch=`sed < tmp$2 -e"s/[^,]//g" | sed -e"s/ //g" | wc -c`
falsch=`expr $ndi - $zeilen`
if test $richtig -ne $falsch
then echo "Keine Datenintegrität, zuviele oder zu wenige Kommata !!!"
else echo "Datenintegrität o.k."
fi

Ansonsten geht mir jetzt einfach die Puste aus.

Danke schon mal
Reiner
 

Jochen
Gast





BeitragVerfasst am: 05. Feb 2004 16:59   Titel: Re: Anzahl von bestimmten Zeichen ermitteln

Einfach:
code:
awk -F, 'NF != 20 {print "Zeile",NR,"hat keine 20 Felder."}' zu-testende-import-datei
"-F," setzt den Feldtrenner auf ein Komma. Wenn die Anzahl Felder (NF, Number of Fields) des aktuellen Satzes aus der Datei ungleich 20 ist, die Fehlermeldung ausgeben. In NR steht dabei die Nummer der aktuellen Zeile (Number of Records).

Jochen
 

Reiner Gothe
Gast





BeitragVerfasst am: 05. Feb 2004 19:23   Titel: Re: Anzahl von bestimmten Zeichen ermitteln

Danke Jochen, ist super, werde ich morgen gleich in mein Script einbauen und melde mich nochmal
 

Jochen
Gast





BeitragVerfasst am: 06. Feb 2004 8:42   Titel: Re: Anzahl von bestimmten Zeichen ermitteln

Kleine Korrektur: Es muss natürlich
code:
awk -F, 'NF != 21 {print "Zeile",NR,"hat keine 21 Felder."}' zu-testende-import-datei
heissen, denn 20 Trennzeichen erzeugen ja 21 Felder. Sorry...

Jochen
 

Reiner Gothe
Gast





BeitragVerfasst am: 06. Feb 2004 9:11   Titel: Re: Anzahl von bestimmten Zeichen ermitteln

Hat ganz toll funktioniert, wo lernt man sowas ? Bin leider nicht so sehr mit Linux beschäftigt, aber als Novellianer wird das jetzt wohl für mich ernst werden.
Danke nochmal.
Reiner
 

Jochen
Gast





BeitragVerfasst am: 06. Feb 2004 12:00   Titel: Re: Anzahl von bestimmten Zeichen ermitteln

> wo lernt man sowas ?

Indem man Lehrgänge über das Thema awk gibt.

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