Jawk CLI

Getting Started

  • Download jawk-3.3.03-standalone.jar from the latest release

  • Make sure to have Java installed on your system (download)

  • Execute jawk-3.3.03-standalone.jar just like the “traditional” AWK:

    $ java -jar jawk-3.3.03-standalone.jar <command-line-arguments>
    

Examples

Processing of stdin

$ echo "hello world" | java -jar jawk-3.3.03-standalone.jar '{print $2 ", " $1 "!"}'

world, hello!

Execute on Windows (beware of double-double quotes!):

C:\> echo "hello world" | java -jar jawk-3.3.03-standalone.jar "{print $2 "", "" $1 ""!""}"

world, hello!

Classic processing of an input file

$ java -jar jawk-3.3.03-standalone.jar -F : '{print $1 "," $6}' /etc/passwd

root,/root
daemon,/usr/sbin
bin,/bin
sys,/dev
sync,/bin
games,/usr/games
man,/var/cache/man
lp,/var/spool/lpd
mail,/var/mail

Execute a script file

example.awk:

BEGIN {
  totalUsed = 0
  totalAvailable = 0
}
$6 !~ "wsl" && $3 ~ "[0-9]+" {
  totalUsed += $3
  totalAvailable += $4
}
END {
  printf "Total Used: %.1f GB\n", totalUsed / 1048576
  printf "Total Available: %.1f GB\n", totalAvailable / 1048576
}
$ df -kP | java -jar jawk-3.3.03-standalone.jar -f example.awk

Total Used: 559.8 GB
Total Available: 2048.0 GB

Matrix in your terminal (Linux)

$ while :;do echo $LINES $COLUMNS $(( $RANDOM % $COLUMNS)) $(printf "\U$(($RANDOM % 500))");sleep 0.05;done|java -jar jawk-3.3.03-standalone.jar '{a[$3]=0;for (x in a){o=a[x];a[x]=a[x]+1;printf "\033[%s;%sH\033[2;32m%s",o,x,$4;printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,$4;if (a[x]>=$1){a[x]=0;}}}'

Detailed Options

To view the command line argument usage summary, execute:

$ java -jar jawk-3.3.03-standalone.jar -?

Jawk supports all of the standard AWK command line parameters:

  • -v <name=value> - global variable assignments prior to the execution of the script.
  • -F <fs> - input field separator assignment. This is equivalent to FS="fs" prior to its use (by getline or by input rules).
  • -f <filename> - The script filename. If used, a script argument is not expected.

To enhance development and script execution over traditional AWK, Jawk also supports the following command-line parameter extensions:

  • -t - Maintain all associated arrays in key-sorted order. This is implemented by using a TreeMap instead of a HashMap as the backing store for the associated array.
  • -c - writes the tuples (generated by the Intermediate Subsystem) to a file, and then halts. If the -o parameter is provided, use its optarg as the filename. Otherwise, write to "a.ai". This file can be used as an argument to -f to avoid the front end and intermediate steps for a particular script. It also provides a measure of script obfuscation.
  • -o <filename> - Override the default output filename for extended parameters -c, -S, -s, -z, and -Z.
  • -S - Dump the abstract syntax tree (constructed by the front end) to a text readable file. If the -o argument is not provided, the contents will be dumped into the syntax_tree.lst file.
  • -s - Dump the intermediate code (tuples) to a text readable file. If the -o argument is not provided, the contents will be dumped into the "avm.lst" file.
  • -x - Enable **_sleep**, **_dump** and **exec** keywords. _sleep causes the execution thread to sleep for a specified number of seconds (or one second if no argument is provided), and _dump dumps the global variables (names and values) to stdout. If associative array arguments are provided, _dump dumps the contents of each associative array to stdout. And exec dynamically parses and executes complete AWK scripts, however in a separate vairable environment.
  • -y - Enable **_INTEGER**, **_DOUBLE** and **_STRING** typecast keywords. These are particularly useful in [s]printf functions/statements to force parameters to convert to particular types.
  • -r - Allow IllegalFormatExceptions to be thrown when using the java.util.Formatter class for printf/sprintf. If the argument is not provided, the interpreter/compiled result catches IllegalFormatExceptions and silently returns a blank string in its place. If the argument is provided, the interpreter/compiled result will halt by throwing this runtime exception.
  • -ext - Enables the parser/AVM to recognize extensions within scripts. Extensions allow for arbitrary Java code to be called as registered AWK functions. Please refer to the Jawk Extension Facility Description page for more information.
  • -h/-? - Displays a usage screen. The screen contains a list of command-line arguments and what each does.

If -f is not provided, a script argument is expected here.

Finally, one or more of the following parameters are consumed by Jawk and provided to the script via the ARGV/ARGC variables. The script can add/remove to this array to modify the behavior of the interpreter/compiled result.

  • <filename> - Uses this file as input to the script. If the filename is invalid, an error is produced on stderr, but Jawk has no direct way of notifying the script.
  • <name=value> - Performs this assignment as a global variable assignment prior to the consumption of the next input file.

If the parameter contains an =, Jawk treats it like a variable assignment. Otherwise, it's a filename.

Note: Parameters passed into the command-line which result in non-execution of the script (i.e., -S, -s, -h, -? and -z) cause Jawk to ignore filename and name=value parameters._

Jawk employs the org.sentrysoftware.jawk.util.AwkParameters for command-line parameter management.

If an invalid command-line parameter is provided, Jawk will throw an IllegalArgumentException and terminate execution.

No results.