Anzahl von bestimmten Zeichen ermitteln

Post Reply
Message
Author
Reiner Gothe

Anzahl von bestimmten Zeichen ermitteln

#1 Post by Reiner Gothe »

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

Re: Anzahl von bestimmten Zeichen ermitteln

#2 Post by Jochen »

Einfach<img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">awk -F, 'NF != 20 {print "Zeile",NR,"hat keine 20 Felder."}' zu-testende-import-datei</font><hr></pre></blockquote>"-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

Re: Anzahl von bestimmten Zeichen ermitteln

#3 Post by Reiner Gothe »

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

Jochen

Re: Anzahl von bestimmten Zeichen ermitteln

#4 Post by Jochen »

Kleine Korrektur: Es muss natürlich <blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">awk -F, 'NF != <b>21</b> {print "Zeile",NR,"hat keine <b>21</b> Felder."}' zu-testende-import-datei</font><hr></pre></blockquote>heissen, denn 20 Trennzeichen erzeugen ja 21 Felder. Sorry...

Jochen

Reiner Gothe

Re: Anzahl von bestimmten Zeichen ermitteln

#5 Post by Reiner Gothe »

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

Re: Anzahl von bestimmten Zeichen ermitteln

#6 Post by Jochen »

> wo lernt man sowas ?

Indem man Lehrgänge über das Thema awk gibt. <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Jochen

Post Reply