linux_wiki:awk

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
linux_wiki:awk [2015/08/13 22:30]
billdozor
linux_wiki:awk [2019/05/25 23:50] (current)
Line 6: Line 6:
 Gawk is the GNU Project's implementation of the AWK programming language. Gawk is the GNU Project's implementation of the AWK programming language.
  
-I typically stick to using gawk and in most cases, awk is a symlink to gawk+In most cases, awk is a symlink to gawk.
-This page will contain useful gawk commands as I run into them.+
  
 **Checklist** **Checklist**
-  * DistrosAll +  * Distro(s)Any 
-  * gawk installed+  * Software: awk/gawk installed 
 + 
 +---- 
 + 
 +====== General Awk Variables ====== 
 + 
 +  * -F":" => Set the field seperator to colon (:), instead of spaces (default). 
 +    * This can be set to any character 
 +  * $0 => The entire line (excluding new line at the end) 
 +  * $1 - $number => The fields 
 +  * NF => Number of fields on the current line 
 +  * NR => Current line number
  
 ---- ----
Line 38: Line 48:
 true true
 </code> </code>
 +
 +----
 +
 +===== Print Line After Match =====
 +
 +Search for a regex string and print the line AFTER the match.
 +
 +<code bash>
 +awk '/mystring/ { getline; print }'
 +</code>
 +  * mystring => regex string to search for
 +  * getline => set the line $0 to the next line
 +  * print => print the line
 +
 +----
 +
 +===== Print Line Before Match =====
 +
 +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.
 +
 +  - Find users and account disabled status<code bash>
 +/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
 +</code>
 +  - Narrow it down to just usernames and True/False values<code bash>
 +/usr/bin/ipa user-find --sizelimit=0 --all | grep -E "(User login|Account disabled)" | awk '{print $3}'
 +
 +rjones
 +False
 +sanderson
 +True
 +</code>
 +  - Add in the awk magic that will display ONLY the username with "False" after it (Not Disabled)<code bash>
 +/usr/bin/ipa user-find --sizelimit=0 --all | grep -E "(User login|Account disabled)" | awk '{print $3}' | awk '/False/ { print x }; { x=$0 }'
 +
 +rjones
 +</code>
 +
 +**Explanation**
 +  * If the current line matches the regular expression "False" ("/False/"), then
 +    * Print the value of x ("{ print x }").
 +  * Next, store the current line in the variable "x" ("{ x=$0 }" (Always do this; Does not matter if it matches)
 +    * This has the effect of making the previous line available when evaluating the next line.
 +      * Note: This will not work if the very first line matches the pattern, as x will not contain any lines yet.
 +
 +----
 +
  • linux_wiki/awk.1439519452.txt.gz
  • Last modified: 2019/05/25 23:50
  • (external edit)