AWK

From HaFrWiki42
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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:

  1. nawk, AT&T's `new awk' -- probably nobody uses the `old awk' anymore-- . Interpreter, might NOT be well-maintained
  2. gawk, GNU project, interpreter.
  3. mawk, Michael Brennan, interpreter.
  4. tawk, Thompson Automation, interpreter, compiler, MS-Windows DLL
  5. 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.

See also

top

  • 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.

Reference

top

  1. AWK, Wikipedia AWK article.