Awk is one of the most powerful tools in Unix used for processing the rows and columns in a file.Actually, you can process log files that contain maybe millions of lines to output a readable report that you can benefit from.With awk scripting language, you can make the following:
- Define variables.
- Use string and arithmetic operators.
- Use control flow and loops.
- Generate formatted reports.
Awk stands for the names of its authors “Aho, Weinberger, and Kernighan”
Consider a text file notes.txt to be processed with the following content −
~ emreozkan$ cat notes.txt 1) Emre Physics 10 2) Mehmet Biology 85 3) Selim Maths 81 4) Mustafa History 78 5) Sema English 68
Printing Column or Field
You can instruct AWK to print only certain columns from the input field.
Example:
~ emreozkan$ awk '{print $2 "\t" $3}' notes.txt
On executing this code, you get the following result −
Output:
Emre Physics Mehmet Biology Selim Maths Mustafa History Sema English
In the file notes.txt, the second column contains the student name and the third column contains the subject name.
Printing Columns by Pattern
Example:
~ emreozkan$ awk '/l/ {print $3 "\t" $4}' notes.txt
Output:
Selim Maths Mustafa History Sema English
Printing All Lines
Example:
~ emreozkan$ awk '/e/ {print $0}' notes.txt
On executing this code, you get the following results:
1) Emre Physics 10 2) Mehmet Biology 85 3) Selim Maths 81 5) Sema English 68
In the above example, we want to find “e” .The results that match what we want, it executes a command from the body block.
Printing Lines with More than 23 Characters
Example:
~ emreozkan$ awk 'length($0) > 23' notes.txt
1) Emre Physics 10
2) Mehmet Biology 85
4) Mustafa History 78
5) Sema English 68
Initialization and Final Action
Awk has two important patterns which are specified by the keyword called BEGIN and END.
Syntax: BEGIN { Actions} {ACTION} # Action for everyline in a file END { Actions } # is for comments in Awk Example: awk 'BEGIN {print "Name\tSubjectName\tNotes";} {print $2,"\t",$3,"\t",$4,"\t",$NF;} END{print "Report Generated\n--------------"; }' notes.txt
:~ emreozkan$ awk 'BEGIN {print "Name\tSubjectName\tNotes";} {print $2,"\t",$3,"\t",$4,"\t",$NF;} END{print "Report Generated\n--------------"; }' notes.txt Name SubjectName Notes Emre Physics 10 10 Mehmet Biology 85 85 Selim Maths 81 81 Mustafa History 78 78 Sema English 68 68 Report Generated --------------
it prints headline and last file for the reports.
Print the list of Students in Physics
Class name is available third column.
Emre-MacBook-Air:~ emreozkan$ awk '$3 ~/Physics/' notes.txt
1) Emre Physics 10
Print number of Students in Maths Department
Emre-MacBook-Air:~ emreozkan$ awk 'BEGIN { count=0;} > $3 ~ /Maths/ { count++; } > END { print "Number of employees in Maths Dept =",count;}' notes.txt Number of students in Maths Dept = 2