我有一个像这样的文件
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丢失。
另外,检查所有七个数字是否以;
而不是其他任何字符为界是很好的。
谢谢
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句