このようなファイルがあります。
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
問題のある行を見つけるために使用される行番号。