我想写一个小小的shell脚本,它可以检查文件中的所有行是否都具有相同的;
号
我有一个包含以下格式的文件:
$ cat filename.txt
34567890;098765456789;098765567;9876;9876;EXTG;687J;
4567800987987;09876789;9667876YH;9876;098765;098765;09876;
SLKL987H;09876LKJ;POIUYT;PÖIUYT;88765K;POIUYTY;LKJHGFDF;
TYUIO;09876LKJ;POIUYT;LKJHG;88765K;POIUYTY;OIUYT;
...
...
...
SDFGHJK;RTYUIO9876;4567890LKJHGFD;POIUYTRF56789;POIUY;POIUYT;9876;
我使用以下命令确定每行的;
数:
awk -F';' 'NF{print (NF-1)}' filename.txt
我有以下输出:
7
7
7
7
...
...
...
7
因为此文件的每一行上的;
的数量为7。
现在,我想编写一个脚本,使我可以验证文件中的所有行是否都有7个逗号。如果可以,则表明文件正确。否则,如果单行包含7个以上的逗号,则表明文件不正确。
而不是输出输出,而是返回一个值。例如
awk -F',' 'NR==1{count = NF} NF!=count{status=1}END{exit status}' filename.txt
如果没有行,或者所有行都包含相同数量的逗号,则将返回0。否则,它将返回1以指示失败。
计算唯一行数并确认计数为1。
if (($(awk -F';' 'NF{print (NF-1)}' filename.txt | uniq | wc -l) == 1)); then
echo good
else
echo bad
fi
仅将结果通过sort -u | wc -l
传递。如果所有行都具有相同数量的字段,则将产生一行输出。
或者,仅在awk
中查找与第一行没有相同字段数的行。
awk -F';' '1 {linecount=NF} linecount != NF { print "Bad line " $0; exit }' filename.txt