awk

Patterns and Actions

Introduction

An awk consists of patterns and actions, enclosed in curly brackets, to be taken if a pattern matches. The most basic pattern is the empty pattern, which matches any record. The most basic action is the empty action, which is equivalent to { print }, which is, in turn, equivalent to { print $0 }. If both the pattern and the action are empty, awk will simply do nothing.

The following program will simply echo its input, for example:

awk '{ print }' /etc/passwd

Since { print } is the default action, and since a true value matches any record, that program could be re-written as:

awk '1' /etc/passwd

The most common type of pattern is probably a regular expression enclosed in slashes. The following program will print all records that contain at least two subsequent occurrences of the letter o, for example:

awk '/oo+/ { print }' /etc/passwd

However, you can use arbitrary expressions as patterns. The following program prints the names (field one) of users in group zero (field four), for example:

awk -F: '$4 == 0 { print $1 }' /etc/passwd

Instead of matching exactly, you can also match against a regular expression. The following program prints the names of all users in a group with at least one zero in its group id:

awk -F: '$4 ~ /0/ { print $1 }' /etc/passwd

Filter Lines by length

This pattern will allow you to filter lines depending on its length

$cat file
AAAAA
BBBB
CCCC
DDDD
EEEE

$awk 'length($0) > 4 { print $0 }' file
AAAAA
$

Anyway, the pattern will allow the next code block to be executed, then, as the default action for AWK is printing the current line {print}, we´ll see the same result when executing this:

$awk 'length($0) > 4 ' file
AAAAA

This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow