Linux / Unix: Sed / Grep / Awk Print Lines If It Got 3 Words Only

Posted on in Categories last updated November 9, 2012

I have a sample data file:

This is a test.
Unix is Best.
No Linux is the Best.
Space in simple understanding is an area or volume.
Outer space .

I need the output:

Unix is Best.
Outer space .

How do I print all lines that have three (3) words only?

The awk command is well suitable for this kind of pattern processing text file. Awk set the variable called NF. It is set to the total number of fields in the input record. So if NF equal to three print the line. The syntax is as follows:

awk '{ if ( NF == 3 ) print } ' /path/to/input

It is also possible to emulate awk command output using a shell script while loop and IFS (internal field separator) in loops:

# AWK NF if condition (awk '{ if ( NF == 3 ) print } ' $_input) emulation using bash 
# Author: nixCraft <>
# -----------------------------------------------------------------------------------
while IFS= read -r line
	set -- $line
	[ $# -eq $_word ] &&  echo "$line" 
done < "$_input"

Sample outputs:

Unix is Best.
Outer space .

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

2 comment

Leave a Comment