檢查文字檔案是否包含所有條目且格式正確

檢查文字檔案是否包含所有條目且格式正確

我有一個像這樣的文件

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 或 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 不見了。

作為獎勵,最好檢查所有七個數字是否由;而不是任何其他字元分隔。

謝謝

答案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尋找這些違規行的行號。

相關內容