Posted On June 4, 2020

BASH: Basic AWK Training

kimconnect 0 comments
blog.KimConnect.com >> Codes >> BASH: Basic AWK Training

At first, AWK resembles the first three letter of ‘awkward’. Nope, it’s a scripting language developed by Aho, Weinberger, and Kernighan. Their creation gives us the ability to perform data transformation on the fly. It’s one of the must-have CLI and BASH tools to manipulate text files and databases. Here’s how it works:

a. Scans a file as array of lines
b. Compares each line, which is called ‘field’ in this language, to a given pattern
c. Performs programmatic transformation on the matched fragments of each line
d. General format: awk OPTIONS 'MATCH' {action }' INPUT or "$string" | awk OPTIONS 'MATCH' {action }' 

Here are some examples:

# Print everything in a text file
wiwi@testbox:~$ awk '{ print $0 }' /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin

# Print match indexes before the match criteria of ':'
wiwi@testbox:~$ awk -F':' '{username=$1;uid=$3;gid=$4; print username,uid,gid }' /etc/passwd
root 0 0
daemon 1 1
bin 2 2
sys 3 3
sync 4 65534
games 5 60

# search for specific users
wiwi@testbox:~$ awk '/bruce|mike|sensei/' /etc/passwd
bruce:x:2000:1020:bruce:/home/bruce:/bin/bash
mike:x:2001:1020:mike:/home/mike:/bin/bash
sensei:x:2002:1020:sensei:/home/sensei:/bin/bash

list=$(awk '{ print $0 }' /etc/passwd)
"$list"|awk -F':' '{username=$1;uid=$3;gid=$4; print username,uid,gid }'

# Print word #3 and #6 from string
echo "One Two Three Four Five Six Seven Eitght Nine Ten" | awk {'print "third word: "$3" sixth word: "$6'}

# Output
third word: Three sixth word: Six

# AWK in combination with Regex - return the line matching certain patterns
regex='/^bruce/'
echo -e "$list"|awk $regex

# Working with space or comma delimited files
# Printing first and second fields
awk -F "," '{print $1 " is at table " $2}' test.csv

kim@kimlinux:~/Downloads$ cat test.csv
john doe, 2
marie jane, 5
bruce lee, 7
tom cruise, 1

kim@kimlinux:~/Downloads$ awk -F "," '{print $1 " is at table " $2}' test.csv
john doe is at table  2
marie jane is at table  5
bruce lee is at table  7
tom cruise is at table  1

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post

PowerShell: Benchmark Disk Speed

Contrary to previous iteration, this version returns an object with multiple properties describing statistical analysis…

Microsoft SQL AlwaysOn High Availability Cluster Management Tool

There are some bugs in the script. I'm too lazy to go back a fix…

PowerShell: Implementation of Anonymous Self Executing Function

JavaScript has this. It's a little known secret that PowerShell can do this as well.…