Проверка наличия всех записей в текстовом файле и правильности его форматирования

Проверка наличия всех записей в текстовом файле и правильности его форматирования

У меня есть файл, похожий на этот

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

Первое число — это счетчик, а следующие шесть — одно- или двузначные числа.

В файле тысячи таких строк. Начинается с 1 и доходит до 9999.

есть ли способ проверить, отсутствует ли строка? Я имею в виду, присутствуют ли все числа от числа в первой строке до числа в последней строке?

Я имею в виду вот это:

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

нет ли пропущенной строки между 0001 и 9999?

Предположим следующее:

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

видите? 0005 отсутствует.

В качестве бонуса было бы неплохо проверить, что все семь цифр разделены именно этим ;символом, а не каким-либо другим.

Спасибо

решение1

AWKрешение (предполагая, что вашесли он печатает первый, как будто это нормально):

Пример файла 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

для состояниячтобы проверить, не пропущена ли строка:

awk -F';' 'NR!=int($1){ printf "%04d is missing\n",NR; exit }' input.csv

Выход:

0004 is missing

для состояниячтобы проверить, все лиСемьЧисла разделены;:

awk -F';' 'NF!=7{printf "Incorrect number of fields: %d on record %d\n",NF,NR; exit}' input.csv

Выход:

Incorrect number of fields: 6 on record 7

решение2

В дополнение к принятому ответу, чтобы найти любую строку с нежелательным символом:

grep '[^0-9;]' filename

который выведет любую строку в файле, содержащую символ, который не является числом или точкой с запятой. Используйте grep -nдля поиска номера строки, в которой есть эти проблемные строки.

Связанный контент