Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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.

share|improve this question
add comment

1 Answer

up vote 7 down vote accepted

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

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

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.