How to use awk to print lines where a field matches a specific string?

I have:

1 LINUX param1 value1 
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4

I need awk to print all lines in which $2 is LINUX.


In awk:

awk '$2 == "LINUX" { print $0 }' test.txt

See awk by Example for a good intro to awk.

In sed:

sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt

See sed by Example for a good intro to sed.


This is a case in which you can use the beautiful idiomatic awk:

awk '$2=="LINUX"' file

That is:

  • The default action of awk when in a True condition is to print the current line.
  • Since $2 == "LINUX" is true whenever the 2nd field is LINUX, this will print those lines in which this happens.

In case you want to print all those lines matching LINUX no matter if it is upper or lowercase, use toupper() to capitalize them all:

awk 'toupper($2)=="LINUX"' file

Or IGNORECASE with either of these syntaxs:

awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file
awk -v IGNORECASE=1 '$2=="LINUX"' file