Eu tenho um arquivo que é assim
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
O primeiro número é um contador e os seis seguintes são números de 1 ou 2 dígitos.
O arquivo tem milhares de linhas como esta. Começa em 1 e vai até 9999.
Existe uma maneira de verificar se há uma linha faltando? Quero dizer, se todos os números estiverem presentes desde o da primeira linha até o da última linha?
quero dizer assim:
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
falta alguma linha entre 0001 e 9999?
Suponha isto:
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
Vejo? 0005 está faltando.
Como bônus, seria bom verificar se todos os sete números são delimitados por ;
e não por qualquer outro caractere.
Obrigado
AWK
solução (assumindo que o seu se imprime o primeiro como se estivesse ok ):Arquivo de amostra
input.csv
:para condição para verificar se há uma linha faltando :
A saída:
for condição para verificar se todos os sete números são delimitados por
;
:A saída:
Além da resposta aceita, para encontrar qualquer linha com um caractere indesejado:
que produzirá qualquer linha no arquivo que contenha um caractere que não seja um número ou um ponto e vírgula. Use
grep -n
para encontrar o número da linha dessas linhas ofensivas.