检查文件中的所有行是否都使用相同的格式

问题描述 投票:0回答:3

我想写一个小小的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个以上的逗号,则表明文件不正确。

linux shell
3个回答
1
投票

而不是输出输出,而是返回一个值。例如

awk -F',' 'NR==1{count = NF} NF!=count{status=1}END{exit status}' filename.txt

如果没有行,或者所有行都包含相同数量的逗号,则将返回0。否则,它将返回1以指示失败。


0
投票

计算唯一行数并确认计数为1。

if (($(awk -F';' 'NF{print (NF-1)}' filename.txt | uniq | wc -l) == 1)); then
    echo good
else
    echo bad
fi

0
投票

仅将结果通过sort -u | wc -l传递。如果所有行都具有相同数量的字段,则将产生一行输出。

或者,仅在awk中查找与第一行没有相同字段数的行。

awk -F';' '1 {linecount=NF} linecount != NF { print "Bad line " $0; exit }' filename.txt
© www.soinside.com 2019 - 2024. All rights reserved.