2

I'm looking for an easy, portable way to validate the number of fields in /etc/passwd, /etc/shadow, /etc/group and /etc/master.passwd. This would run on FreeBSD, Linux and other Un*xes. pwck does this, and more, but it only runs on Linux-based systems.

How can I count the number of fields separated by colons in /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

Following the example in "grep: count total number of occurrences", I came up with the following quick hack:

cat /etc/passwd | while read LINE; do echo $LINE | grep -o ':'  |wc -l; done

But I'm looking for a better way.

Stefan Lasiewski
  • 19,754
  • 24
  • 70
  • 85

1 Answers1

7

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

should do it. If the number of fields is not 7, then print it out.

Marcin
  • 1,597