验证 /etc/passwd 每行的字段数是否正确?

Ste*_*ski 2 users text-processing

我正在寻找一种简单、便携的方法来验证 /etc/passwd、/etc/shadow、/etc/group 和 /etc/master.passwd 中的字段数量。这将在 FreeBSD、Linux 和其他 Un*xes 上运行。pwck 可以做到这一点,但它只能在基于 Linux 的系统上运行。

如何计算 /etc/passwd 中以冒号分隔的字段数?

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

按照“ grep:计数总出现次数”中的示例,我想出了以下快速技巧:

cat /etc/passwd | while read LINE; do echo $LINE | grep -o ':'  |wc -l; done
Run Code Online (Sandbox Code Playgroud)

但我正在寻找更好的方法。

Mar*_*cin 7

awk -F: ' NF!=7 {print}' /etc/passwd

应该这样做。如果字段数不是 7,则将其打印出来。