
Ich habe eine Datei, die so aussieht
0001;4;5;30;33;41;52
0002;9;37;39;41;43;49
0003;10;11;29;30;36;47
0004;1;5;6;27;42;59
0005;1;2;6;16;19;46
0006;7;13;19;22;40;47
0007;3;5;20;21;38;56
... etc
Die erste Zahl ist ein Zähler und die folgenden sechs sind ein- oder zweistellige Zahlen.
Die Datei enthält Tausende solcher Zeilen. Sie beginnt bei 1 und geht bis 9999.
gibt es eine Möglichkeit zu prüfen, ob eine Zeile fehlt? Ich meine, ob alle Zahlen von der ersten bis zur letzten Zeile vorhanden sind?
Ich meine so:
0001;4;5;30;33;41;52 // first line
0002;9;37;39;41;43;49
0003;10;11;29;30;36;47
...
9999;3;4;8;12;55;88 // last line
fehlt zwischen 0001 und 9999 eine Zeile?
Nehmen wir Folgendes an:
0001;4;5;30;33;41;52
0002;9;37;39;41;43;49
0003;10;11;29;30;36;47
0004;1;5;6;27;42;59
0006;7;13;19;22;40;47
siehst du? 0005 fehlt.
Als Bonus wäre es schön zu prüfen, ob alle sieben Zahlen durch ;
und nicht durch ein anderes Zeichen getrennt sind.
Danke
Antwort1
AWK
Lösung (vorausgesetzt, Ihrwenn es das erste ausdruckt, ist es ok):
Beispieldatei input.csv
:
0001;4;5;30;33;41;52
0002;9;37;39;41;43;49
0003;10;11;29;30;36;47
0005;1;2;6;16;19;46
0006;7;13;19;22;40;47
0007;3;5;20;21;38;56
0008;1;5,6;27;42;59
0009;10;1;6;27;42;59
für den Zustandum zu prüfen, ob eine Zeile fehlt:
awk -F';' 'NR!=int($1){ printf "%04d is missing\n",NR; exit }' input.csv
Die Ausgabe:
0004 is missing
für den Zustandum zu prüfen, ob alleSiebenZahlen werden getrennt durch;
:
awk -F';' 'NF!=7{printf "Incorrect number of fields: %d on record %d\n",NF,NR; exit}' input.csv
Die Ausgabe:
Incorrect number of fields: 6 on record 7
Antwort2
So finden Sie zusätzlich zur akzeptierten Antwort alle Zeilen mit einem unerwünschten Zeichen:
grep '[^0-9;]' filename
Dadurch werden alle Zeilen in der Datei ausgegeben, die ein Zeichen enthalten, das weder eine Zahl noch ein Semikolon ist. Verwenden Sie diese Option, grep -n
um die Zeilennummer dieser fehlerhaften Zeilen zu finden.