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

SedAwk

Sed Problem Overview


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.

Sed Solutions


Solution 1 - Sed

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.

Solution 2 - 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

Solution 3 - Sed

My answer is very late, but no one has mentioned:

awk '$2~/LINUX/' file

Solution 4 - Sed

Try these out:

egrep -i '^\w+ LINUX ' myfile

awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile

sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile

edit: modified for case insensitivity

Solution 5 - Sed

I think it might be a good idea to include "exact" and "partial matching" cases using awk ))

So, for exact matching:

OTHER_SHELL_COMMAND | awk '$2 == "LINUX" { print $0 }'

And for partial matching:

OTHER_SHELL_COMMAND | awk '$2 ~ /LINUX/ { print $0 }'

Solution 6 - Sed

In GNU sed case-insensitive matches can be made using the I modifier:

sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip'

Will robustly match "linux", "Linux", "LINUX", "LiNuX" and others as the second field (after the first field which may be any non-whitespace character) and surrounded by any amount (at least one) of any whitespace (primarily space and tab, although you can use [:blank:] to limit it to strictly those).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionyaelView Question on Stackoverflow
Solution 1 - SedHank GayView Answer on Stackoverflow
Solution 2 - SedfedorquiView Answer on Stackoverflow
Solution 3 - SedenegueView Answer on Stackoverflow
Solution 4 - SedB JohnsonView Answer on Stackoverflow
Solution 5 - SedArsen KhachaturyanView Answer on Stackoverflow
Solution 6 - SedDennis WilliamsonView Answer on Stackoverflow