gawk: Other Versions
B.5 Other Freely Available 'awk' Implementations
================================================
It's kind of fun to put comments like this in your awk code:
'// Do C++ comments work? answer: yes! of course'
-- _Michael Brennan_
There are a number of other freely available 'awk' implementations.
This minor node briefly describes where to get them:
Unix 'awk'
Brian Kernighan, one of the original designers of Unix 'awk', has
made his implementation of 'awk' freely available. You can
retrieve this version via his home page
(http://www.cs.princeton.edu/~bwk). It is available in several
archive formats:
Shell archive
<http://www.cs.princeton.edu/~bwk/btl.mirror/awk.shar>
Compressed 'tar' file
<http://www.cs.princeton.edu/~bwk/btl.mirror/awk.tar.gz>
Zip file
<http://www.cs.princeton.edu/~bwk/btl.mirror/awk.zip>
You can also retrieve it from GitHub:
git clone git://github.com/onetrueawk/awk bwkawk
This command creates a copy of the Git (https://git-scm.com)
repository in a directory named 'bwkawk'. If you leave that
argument off the 'git' command line, the repository copy is created
in a directory named 'awk'.
This version requires an ISO C (1990 standard) compiler; the C
compiler from GCC (the GNU Compiler Collection) works quite nicely.
Common Extensions for a list of extensions in this 'awk'
that are not in POSIX 'awk'.
As a side note, Dan Bornstein has created a Git repository tracking
all the versions of BWK 'awk' that he could find. It's available
at <git://github.com/danfuzz/one-true-awk>.
'mawk'
Michael Brennan wrote an independent implementation of 'awk',
called 'mawk'. It is available under the GPL (Copying),
just as 'gawk' is.
The original distribution site for the 'mawk' source code no longer
has it. A copy is available at
<http://www.skeeve.com/gawk/mawk1.3.3.tar.gz>.
In 2009, Thomas Dickey took on 'mawk' maintenance. Basic
information is available on the project's web page
(http://www.invisible-island.net/mawk). The download URL is
<http://invisible-island.net/datafiles/release/mawk.tar.gz>.
Once you have it, 'gunzip' may be used to decompress this file.
Installation is similar to 'gawk''s (Unix Installation).
Common Extensions for a list of extensions in 'mawk' that
are not in POSIX 'awk'.
'mawk' 2.0
In 2016, Michael Brennan resumed 'mawk' development. His
development snapshots are available via Git from the project's
GitHub page (https://github.com/mikebrennan000/mawk-2).
'awka'
Written by Andrew Sumner, 'awka' translates 'awk' programs into C,
compiles them, and links them with a library of functions that
provide the core 'awk' functionality. It also has a number of
extensions.
The 'awk' translator is released under the GPL, and the library is
under the LGPL.
To get 'awka', go to <https://sourceforge.net/projects/awka>.
The project seems to be frozen; no new code changes have been made
since approximately 2001.
'pawk'
Nelson H.F. Beebe at the University of Utah has modified BWK 'awk'
to provide timing and profiling information. It is different from
'gawk' with the '--profile' option (Profiling) in that it
uses CPU-based profiling, not line-count profiling. You may find
it at either
<ftp://ftp.math.utah.edu/pub/pawk/pawk-20030606.tar.gz> or
<http://www.math.utah.edu/pub/pawk/pawk-20030606.tar.gz>.
BusyBox 'awk'
BusyBox is a GPL-licensed program providing small versions of many
applications within a single executable. It is aimed at embedded
systems. It includes a full implementation of POSIX 'awk'. When
building it, be careful not to do 'make install' as it will
overwrite copies of other applications in your '/usr/local/bin'.
For more information, see the project's home page
(https://busybox.net).
The OpenSolaris POSIX 'awk'
The versions of 'awk' in '/usr/xpg4/bin' and '/usr/xpg6/bin' on
Solaris are more or less POSIX-compliant. They are based on the
'awk' from Mortice Kern Systems for PCs. We were able to make this
code compile and work under GNU/Linux with 1-2 hours of work.
Making it more generally portable (using GNU Autoconf and/or
Automake) would take more work, and this has not been done, at
least to our knowledge.
The source code used to be available from the OpenSolaris website.
However, that project was ended and the website shut down.
Fortunately, the Illumos project
(https://wiki.illumos.org/display/illumos/illumos+Home) makes this
implementation available. You can view the files one at a time
from
<https://github.com/joyent/illumos-joyent/blob/master/usr/src/cmd/awk_xpg4>.
'jawk'
This is an interpreter for 'awk' written in Java. It claims to be
a full interpreter, although because it uses Java facilities for
I/O and for regexp matching, the language it supports is different
from POSIX 'awk'. More information is available on the project's
home page (https://jawk.sourceforge.net).
Libmawk
This is an embeddable 'awk' interpreter derived from 'mawk'. For
more information, see <http://repo.hu/projects/libmawk/>.
'pawk'
This is a Python module that claims to bring 'awk'-like features to
Python. See <https://github.com/alecthomas/pawk> for more
information. (This is not related to Nelson Beebe's modified
version of BWK 'awk', described earlier.)
QSE 'awk'
This is an embeddable 'awk' interpreter. For more information, see
<https://code.google.com/p/qse/>.
'QTawk'
This is an independent implementation of 'awk' distributed under
the GPL. It has a large number of extensions over standard 'awk'
and may not be 100% syntactically compatible with it. See
<http://www.quiktrim.org/QTawk.html> for more information,
including the manual. The download link there is out of date; see
<http://www.quiktrim.org/#AdditionalResources> for the latest
download link.
The project may also be frozen; no new code changes have been made
since approximately 2014.
Other versions
See also the "Versions and implementations" section of the
Wikipedia article
(https://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations)
on 'awk' for information on additional versions.