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
Anzahl von bestimmten Zeichen ermitteln
Re: Anzahl von bestimmten Zeichen ermitteln
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
Jochen
Re: Anzahl von bestimmten Zeichen ermitteln
Danke Jochen, ist super, werde ich morgen gleich in mein Script einbauen und melde mich nochmal
Re: Anzahl von bestimmten Zeichen ermitteln
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
Jochen
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
Danke nochmal.
Reiner
Re: Anzahl von bestimmten Zeichen ermitteln
> 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
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