The awk command performs pattern matching on files. It is based on the AWK programming language. The awk keyword is followed by the pattern, the action to be performed, and the file name. The action to be performed is given within curly braces. The pattern and the action to be performed should be specified within single quotes. If the pattern is not specified, the action is performed on all input data; however, if the action is not specified, the entire line is printed. The awk command can be executed from the command-line or from within an awk script file.
The awk command can be used to process text files in a variety of ways, such as extracting text matching a certain pattern; deleting text matching a certain pattern; adding text matching a certain pattern; and much more.
Syntax
The syntax of the awk command is:
# awk [options] ['patterns {actions}'] {file names}
If you encounter the below error while running the awk command:
you may try installing the below package as per your choice of distribution:
OS Distribution | Command |
---|---|
OS X | brew install awk |
Debian | apt-get install gawk |
Ubuntu | apt-get install gawk |
Alpine | apk add gawk |
Arch Linux | pacman -S gawk |
Kali Linux | apt-get install gawk |
CentOS | yum install gawk |
Fedora | dnf install gawk |
Raspbian | apt-get install gawk |
awk Command Examples
1. Print the fifth column (a.k.a. field) in a space-separated file:
# awk '{print $5}' filename
2. Print the second column of the lines containing “foo” in a space-separated file:
# awk '/foo/ {print $2}' filename
3. Print the last column of each line in a file, using a comma (instead of space) as a field separator:
# awk -F ',' '{print $NF}' filename
4. Sum the values in the first column of a file and print the total:
# awk '{s+=$1} END {print s}' filename
5. Print every third line starting from the first line:
# awk 'NR%3==1' filename
6. Print different values based on conditions:
# awk '{if ($1 == "foo") print "Exact match foo"; else if ($1 ~ "bar") print "Partial match bar"; else print "Baz"}' filename
7. Print all lines where the 10th column value equals the specified value:
# awk '($10 == value)'
8. Print all the lines which the 10th column value is between a min and a max:
# awk '($10 >= min_value && $10