General Information
AWK is a pattern scanning and processing language. Gawk is the GNU Project's implementation of the AWK programming language.
In most cases, awk is a symlink to gawk.
Checklist
gawk's gsub string function matches and replaces regular expressions. This can replace a grep | sed combination.
~$ echo -e "Hello, friend.\nHello, how are you?\nI am fine." | gawk 'gsub(/Hello/,"Goodbye")' Goodbye, friend. Goodbye, how are you?
Notice that the last line “I am fine.” is not displayed at all because it doesn't match the regex. (Hello)
Bash doesn't have a really good way to compare floating point numbers. (Such as version numbers) This can be done very well with gawk.
Check to see if VERSION is >= to 3.5.3
VERSION=4.3.0 echo | gawk -v n1=${VERSION} -v n2=3.5.3 '{if (n1>=n2) print ("true"); else print ("false");}' true
Search for a regex string and print the line AFTER the match.
awk '/mystring/ { getline; print }'
This trick allows you to search for a regex string, and print the line BEFORE the match.
FreeIPA Example: I want to get only enabled account usernames.
/usr/bin/ipa user-find --sizelimit=0 --all | grep -E "(User login|Account disabled)" User login: rjones Account disabled: False User login: sanderson Account disabled: True
/usr/bin/ipa user-find --sizelimit=0 --all | grep -E "(User login|Account disabled)" | awk '{print $3}' rjones False sanderson True
/usr/bin/ipa user-find --sizelimit=0 --all | grep -E "(User login|Account disabled)" | awk '{print $3}' | awk '/False/ { print x }; { x=$0 }' rjones
Explanation