AWK: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
|||
Line 4: | Line 4: | ||
* Brian W. Kernighan | * Brian W. Kernighan | ||
* Peter J. Weinberger | * Peter J. Weinberger | ||
They write: ''Awk is a convenient and expressive programming language that can be applied to a wide variety of computing and data-manipulation tasks.'' | |||
== Introduction == | |||
The AWK scripting language is a powerful solution for handling text. It may not give a solution for any programming issue, but it sure is a handy and convenient. | |||
== Built-in Variables == | |||
{| class="wikitableharm" width="950" | |||
|- | |||
! width="100" | Variable | |||
! width="600" | Description | |||
! width="250" | Default | |||
|- | |||
| ARGC || Number of command line arguments || - | |||
|- | |||
| ARGV || Array of command-line arguments || - | |||
|- | |||
| FILENAME || Name of the current input file || - | |||
|- | |||
| FNR || Record number in the current file || - | |||
|- | |||
| FS || Controls the input field separator || " " (space) | |||
|- | |||
| NF || Number of fields in the current record || - | |||
|- | |||
| NR || Number of records read so far || - | |||
|- | |||
| OFMT || Output format for numbers (as used in printf) || %.6g" | |||
|- | |||
| OFS || Output field separator || " " (space) | |||
|- | |||
| ORS || Output record separator || "\n" | |||
|- | |||
| RLENGHT || Length of the input record separator || - | |||
|- | |||
| RS || Controls the input record separator || \n | |||
|- | |||
| RSTART || Start of string matched by match function || - | |||
|- | |||
| SUBSEP || Subscript separator, also called FS in Ascii. || Oct: \034, Dec: 28, Hex: \0x1C | |||
|} | |||
Most implementations of awk are interpreters which read your awk source program and parse it and act on it directly. Example implementations: | Most implementations of awk are interpreters which read your awk source program and parse it and act on it directly. Example implementations: | ||
Line 13: | Line 52: | ||
# tawk, Thompson Automation, interpreter, compiler, MS-Windows DLL | # tawk, Thompson Automation, interpreter, compiler, MS-Windows DLL | ||
# mksawk, Mortice Kern Systems (MKS), interpreter, compiler, | # mksawk, Mortice Kern Systems (MKS), interpreter, compiler, | ||
== Build | |||
== Examples == | == Examples == |
Revision as of 20:39, 21 February 2015
AWK [1] is an extremely versatile programming language for working on files and is named after its three original authors:
- Alfred V. Aho
- Brian W. Kernighan
- Peter J. Weinberger
They write: Awk is a convenient and expressive programming language that can be applied to a wide variety of computing and data-manipulation tasks.
Introduction
The AWK scripting language is a powerful solution for handling text. It may not give a solution for any programming issue, but it sure is a handy and convenient.
Built-in Variables
Variable | Description | Default |
---|---|---|
ARGC | Number of command line arguments | - |
ARGV | Array of command-line arguments | - |
FILENAME | Name of the current input file | - |
FNR | Record number in the current file | - |
FS | Controls the input field separator | " " (space) |
NF | Number of fields in the current record | - |
NR | Number of records read so far | - |
OFMT | Output format for numbers (as used in printf) | %.6g" |
OFS | Output field separator | " " (space) |
ORS | Output record separator | "\n" |
RLENGHT | Length of the input record separator | - |
RS | Controls the input record separator | \n |
RSTART | Start of string matched by match function | - |
SUBSEP | Subscript separator, also called FS in Ascii. | Oct: \034, Dec: 28, Hex: \0x1C |
Most implementations of awk are interpreters which read your awk source program and parse it and act on it directly. Example implementations:
- nawk, AT&T's `new awk' -- probably nobody uses the `old awk' anymore-- . Interpreter, might NOT be well-maintained
- gawk, GNU project, interpreter.
- mawk, Michael Brennan, interpreter.
- tawk, Thompson Automation, interpreter, compiler, MS-Windows DLL
- mksawk, Mortice Kern Systems (MKS), interpreter, compiler,
== Build
Examples
Command | Description |
---|---|
awk '{ print $2, $1 }' file | Print first two fields in opposite order. |
awk 'length > 80' file | Print lines longer than 80 characters. |
awk '{print length($2)}' file | Print length of string in 2nd column. |
awk '{ for (i = NF; i > 0; --i) print $i }' file | Print fields in reverse order. |
awk '/start/, /stop/' file | Prints all lines between start/stop pairs including 'start' and 'stop'. |
awk '$1 != prev { print; prev = $1 }' file | Prints all lines whose first field is different from previous one. |
awk '$1 > $2 {print $3}' file | Print column 3 of column 1 > column 2. |
awk '$3 > $2' file | Prints line if column 3 > column 2. |
awk '$3 > $1 {print i + "1"; i++}' file | Counts number of lines where column 3 > column 1 |
awk '{print NR, $1}' file | Prints sequence number and column 1 of file. |
awk '{$2 = ""; print}' file | Prints every line after erasing the 2nd column. |
head -28 | awk '{ print "hi" }' | Prints 'hi' 28 times. |
head -4 | awk '{print rand()}' | Prints 4 random numbers between 0 and 1. Always the same sequences. Use srand() to prevent this. |
awk '{printf("%15s %12s %3s %12s %12s %-s\n", $5, $1, $2, $3, $4, $9)}' | sort | Sorts a directory on size and show the result. |
df -P / | grep /dev | awk '{print $5}' | sed 's/%//g' | Shows the free capacity (which is a percentage) of the root directory of a hard disk |
Scripts | Description |
---|---|
{ s += $1 } END { print "sum is", s, " average is", s/NR } |
Add up first column, print sum and average, |
{line = $0} END {print line} |
Prints the last line. |
/Pattern/ {nlines = nlines + 1} END {print nlines} |
Prints the total number of lines containing the word 'pattern'. |
GAWK
The GAWK implementation is also available for windows.
- gnu gawk,
- Savannah gnu, Sources of GAWK.
- gnuwin, gawk packages and binaries.
See also
- Grymoire, Tutorial and introduction made by Bruce Barnet.
- GNU.org, The GNU Awk User’s Guide.
- pement.org, AWK one liners by Eric Pement
- IBM, AWK Tutorial Part 1.
- IBM, AWK Tutorial Part 2.