aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2016-07-14 14:13:13 +1200
committerTom Ryder <tom@sanctum.geek.nz>2016-07-14 14:13:13 +1200
commit15fd6da9f5f142453000daf1342354ef265a86cf (patch)
tree4a732c6804d2c0252d04cf3e964523b53b5fa2e6
parentUse escape for pagebreak char in rfct(1) (diff)
downloaddotfiles-15fd6da9f5f142453000daf1342354ef265a86cf.tar.gz
dotfiles-15fd6da9f5f142453000daf1342354ef265a86cf.zip
Add ax(1)
-rw-r--r--README.markdown2
-rwxr-xr-xbin/ax43
-rw-r--r--man/man1/ax.115
3 files changed, 60 insertions, 0 deletions
diff --git a/README.markdown b/README.markdown
index 1beb4e0a..3c1c4acb 100644
--- a/README.markdown
+++ b/README.markdown
@@ -300,6 +300,8 @@ Installed by the `install-bin` target:
* `rfct(1)` formats ASCII RFCs
* `rfcr(1)` does both, displaying in a pager if appropriate, like a
`man(1)` reader for RFCs
+* `ax(1)` evaluates an awk expression given on the command line; intended as
+ a quick way to test how Awk would interpret a given expression.
* `dub(1)` lists the biggest entries in a directory.
* `edda(1)` provides a means to run `ed(1)` over a set of files preserving
any options, mostly useful for scripts.
diff --git a/bin/ax b/bin/ax
new file mode 100755
index 00000000..3840acf5
--- /dev/null
+++ b/bin/ax
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# ax(1): Evaluate an Awk expression given on the command line with an optional
+# format.
+
+# Usage function
+usage() {
+ printf 'ax: USAGE: ax [format] expression\n'
+}
+
+# Check number of arguments
+case $# in
+
+ # If one argument, we assume format is %s
+ 1) form=%s expr=$1 ;;
+
+ # If two arguments, first is format, second expression
+ 2) form=$1 expr=$2 ;;
+
+ # Any other number of arguments is wrong
+ *)
+ usage >&2
+ exit 2
+ ;;
+esac
+
+# Give help if requested
+case $1 in
+ -h|--help|-\?)
+ usage
+ exit 0
+ ;;
+esac
+
+# Form program
+prog=$(printf '
+ BEGIN {
+ printf "%s\\n", %s
+ }
+' "$form" "$expr")
+
+# Run the program
+awk "$prog"
diff --git a/man/man1/ax.1 b/man/man1/ax.1
new file mode 100644
index 00000000..2e8d7179
--- /dev/null
+++ b/man/man1/ax.1
@@ -0,0 +1,15 @@
+.TH AX 1 "July 2016" "Manual page for ax"
+.SH NAME
+.B ax
+\- evaluate an awk expression
+.SH SYNOPSIS
+.B ax '2.0+3.0'
+.br
+.B ax %.2f 'sin(2)'
+.SH DESCRIPTION
+.B ax
+evaluates an expression given on the command line with awk(1) and prints its
+result using awk's printf, with an optional format specified preceding the
+expression.
+.SH AUTHOR
+Tom Ryder <tom@sanctum.geek.nz>