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

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

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

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

おすすめ記事