텍스트 파일에 모든 항목이 포함되어 있고 올바른 형식인지 확인하세요.

텍스트 파일에 모든 항목이 포함되어 있고 올바른 형식인지 확인하세요.

이런 파일이 있어요

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

첫 번째 숫자는 카운터이고 다음 6개 숫자는 1자리 또는 2자리입니다.

파일에는 이와 같은 수천 줄이 있습니다. 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가 사라졌습니다.

;보너스로, 7개의 숫자가 모두 로 구분되어 있고 다른 문자로 구분되어 있지 않은지 확인하는 것이 좋습니다 .

감사해요

답변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문제가 있는 줄을 찾는 데 사용되는 줄 번호입니다.

관련 정보