テキストファイルにすべての項目が含まれており、正しい形式であることを確認してください。

テキストファイルにすべての項目が含まれており、正しい形式であることを確認してください。

このようなファイルがあります。

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問題のある行を見つけるために使用される行番号。

関連情報