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

by on November 9, 2012 · 2 comments· LAST UPDATED November 9, 2012

in

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 .

Tutorial details
DifficultyEasy (rss)
Root privilegesNo
Requirementsawk and bash
Estimated completion timeN/A

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:

 
#!/bin/bash
# AWK NF if condition (awk '{ if ( NF == 3 ) print } ' $_input) emulation using bash
# Author: nixCraft <www.cyberciti.biz>
# -----------------------------------------------------------------------------------
_input="/path/to/data.txt"
_word=3
while IFS= read -r line
do
	set -- $line
	[ $# -eq $_word ] &&  echo "$line"
done < "$_input"
 

Sample outputs:

Unix is Best.
Outer space .
TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 2 comments… read them below or add one }

1 Seshadri November 12, 2012 at 6:05 am

Since the newer awks “print” by default, you can just do:

awk ‘NF ==3′ filename

Reply

2 vaibhav kanchan December 13, 2012 at 7:01 am

Hi Seshadri,

It should be awk ‘NF == 3′ filename. Yes it will work and no need to use printf too.

Reply

Leave a Comment

Tagged as: , , , , ,

Previous Faq:

Next Faq: