Überprüfen, ob eine Textdatei alle Einträge enthält und richtig formatiert ist

Überprüfen, ob eine Textdatei alle Einträge enthält und richtig formatiert ist

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

AWKLö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 -num die Zeilennummer dieser fehlerhaften Zeilen zu finden.

verwandte Informationen