Package: awkg
awkgawkgis anawklike utility using modern day python language.awkis amazingly simple, fast and quite handy. However, its domain specific constrain
sometimes get in our way.awkgfollows the steps ofawk's design (including its convention for name😉)
and exposes full power of the modern day python.
Python's large set of off-the-shelf existing libraries can of course be imported and used.Installation# Install from pypy$pipinstallawkg# Install from github$pipinstallgit+https://github.com/thammegowda/awkg.gitCLI usage:$ awkg -h 
usage: awkg [-h] [-i INP] [-o OUT] [-F FS] [-OFS OFS] [-ORS ORS]
            [-b BEGIN_SCRIPT] [-e END_SCRIPT] [-im IMPORTS] [-it INIT_PATH]
            [-v]
            inline_script

awkg is an awk-like text-processing tool powered by python language

positional arguments:
  inline_script         Inline python script

optional arguments:
  -h, --help            show this help message and exit
  -i INP, --inp INP     Input file path; None=STDIN
  -o OUT, --out OUT     Output file path; None=STDOUT
  -F FS, -FS FS, --field-sep FS
                        the input field separator. Default=None implies white
                        space
  -OFS OFS, --out-field-sep OFS
                        the out field separator. Default=None implies same as
                        input FS.
  -ORS ORS, --out-rec-sep ORS
                        the output record separator. Default=None implies same
                        as input RS.
  -b BEGIN_SCRIPT, --begin BEGIN_SCRIPT
                        BEGIN block. initialize variables or whatever
  -e END_SCRIPT, --end END_SCRIPT
                        END block. Print summaries or whatever
  -im IMPORTS, --import IMPORTS
                        Imports block. Specify a list of module names to be
                        imported.Semicolon (;) is the delimiter. Ex:
                        json;numpy as np
  -it INIT_PATH, --init INIT_PATH
                        The rc file that initializes environment.Default is
                        $HOME/.awkg.py
  -v, --version         show program's version number and exitExampleCompute mean and std of words per sequencecatdata/train.src|awkg-b'arr=[]; import numpy as np''arr.append(NF)'\-e'arr=np.array(arr); print(f"{NR} lines from {FNAME}, mean={arr.mean():.2f}; std={arr.std():.4f}")'Filter records# use print() explicitely 
cat data/train.src  | awkg  'if NF >= 25: print(*R)' 

Assign boolean expression to special variable RET to trigger implicit print 
cat data/train.src  | awkg  'RET = NF >= 25'

# print respects the OFS value
cat data/train.src  |  awkg  'if NF >= 25: print(NR, NF)' -OFS='\t'Special VariablesNF: Number of fieldsNR: Record numberR: An array having all the columns of current record.R0: analogous to$0it stores the input line before splitting intoR; since python does
not permit$in the identifiers, it is renamed asR0RET: When this variable is set to Truth value oftrueimplicitprint(*R)is triggeredFS: Input Field separatorOFS: Output Field separator; Unless explicitly set,OFS=FSORS: Output Record separatorRS(Currently Not in use)_locals,_globals- all variables in local and global scopeYou are allowed to use any valid python identifiers, than the above variablesDefault import modulesThese modules are imported by defaultsysosrefrom pathlib import PathAuthor:Thamme GowdaRelated toolspawksimilar to this repository, slightly different implementation.gawkGNU awk