Awk Extract Manipulate and Analyze Text Data

2023-03-23
By: O. Wolfson

Introduction

The awk command is a powerful text manipulation tool that is native to Unix-based systems. It's designed for performing text processing tasks such as filtering, transformation, and analysis. In this tutorial, we will cover the basics of 'awk' and show you how to extract, manipulate, and analyze text data using practical examples.

Getting Started with Awk

The syntax for the 'awk' command is as follows:

bash
awk 'pattern { action }' file

The 'pattern' is a regular expression that specifies the lines to match, and 'action' is a set of commands that are executed for each matching line. If no pattern is provided, the action will be applied to all lines in the input file.

Basic Text Processing with Awk

Let's start with some simple examples of using 'awk' to process text data.

a. Print specific fields:

Suppose you have a file called 'employees.txt' containing the following data:

text
John Doe,Software Engineer,5000
Jane Smith,Data Analyst,4000

To print the names of employees, use the following command:

bash
awk -F, '{ print $1 }' employees.txt

The -F flag specifies the field separator (in this case, a comma), and $1 refers to the first field.

b. Perform arithmetic operations:

To calculate the annual salary of each employee, use the following command:

bash
awk -F, '{ print $1 ": $" $3 * 12 }' employees.txt

This will multiply the third field (salary) by 12 and print the result.

Conditional Processing with Awk

Awk allows you to apply actions conditionally using 'if' statements.

a. Filter data based on a condition:

To print the details of employees with a monthly salary greater than 4500, use the following command:

bash
awk -F, '$3 > 4500 { print }' employees.txt

b. Use multiple conditions:

To print the details of Software Engineers with a monthly salary greater than 4500, use the following command:

bash
awk -F, '$2 == "Software Engineer" && $3 > 4500 { print }' employees.txt

Loops and Built-in Variables in Awk

Awk provides 'for' loops and built-in variables for more advanced text processing.

a. Count the number of lines:

To count the number of lines in a file, use the following command:

bash
awk 'END { print NR }' employees.txt

The built-in variable 'NR' represents the number of records (lines) processed.

b. Calculate the total salary:

To calculate the total salary of all employees, use the following command:

bash
awk -F, '{ sum += $3 } END { print "Total salary: $" sum }' employees.txt

This command uses a 'for' loop to sum the third field (salary) of each line.

Advanced Text Processing with Awk

You can also use 'awk' to perform advanced text processing tasks such as sorting, formatting, and text replacement.

a. Sort data based on a field:

To sort employees based on their monthly salary, use the following command:

bash
awk -F, '{ print $3 "," $0 }' employees.txt | sort -n | awk -F, '{ print $2 }'

This command first reorders the fields, sorts the data based on the salary, and then prints the original line.

b. Format the output:

To format the output of the employee data, use the following command:

bash
awk -F, '{ printf "%-20s %-20s %10s\n", $1, $2, "$" $3 }' employees.txt

This command uses the 'printf' function to format the output. The '%-20s' specifier indicates a left-justified string with a width of 20 characters, while '%10s' indicates a right-justified string with a width of 10 characters.

The output will look like this:

bash
John Doe Software Engineer $5000
Jane Smith Data Analyst $4000

Conclusion

In this tutorial, we covered the basics of using the 'awk' command to extract, manipulate, and analyze text data. While this is just an introduction, there are many more advanced features of 'awk' that can be explored to handle complex text processing tasks.