Skip to main content

awkg

awkg is an awk like utility using modern day python language. awk is amazingly simple, fast and quite handy. However, its domain specific constrain sometimes get in our way. awkg follows the steps of awk'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 
$ pip install awkg

# Install from github
$ pip install git+https://github.com/thammegowda/awkg.git

CLI 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 exit

Example

Compute mean and std of words per sequence

cat data/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 Variables

  • NF : Number of fields
  • NR : Record number
  • R : An array having all the columns of current record.
  • R0 : analogous to $0 it stores the input line before splitting into R; since python does not permit $ in the identifiers, it is renamed as R0
  • RET : When this variable is set to Truth value of true implicit print(*R) is triggered
  • FS : Input Field separator
  • OFS : Output Field separator; Unless explicitly set, OFS=FS
  • ORS : Output Record separator
  • RS (Currently Not in use)
  • _locals , _globals - all variables in local and global scope

You are allowed to use any valid python identifiers, than the above variables

Default import modules

These modules are imported by default

  • sys
  • os
  • re
  • from pathlib import Path

Author:

Related tools

  • pawk similar to this repository, slightly different implementation.
  • gawk GNU awk

Release files for awkg 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for awkg 0.3.0
File Size Uploaded
awkg-0.3.0.tar.gz 5.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for awkg 0.3.0
File Interpreter ABI Platform
awkg-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 23.7 kB

Release files / awkg-0.3.0.tar.gz

Download URL awkg-0.3.0.tar.gz
Size 5.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c0d5da9ef06a4aa588537c8c5e0565da2c73ee7be98cc32b468d092cadce91f3
BLAKE2b-256 checksum
How to use checksums
5f437490109172a0f2a1ec0e6a6a411b27b7758feec43cc4f97c30da9b665adf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.23.4 CPython/3.6.7

Release files / awkg-0.3.0-py3-none-any.whl

Download URL awkg-0.3.0-py3-none-any.whl
Size 18.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5b42363a4975ca4607ff154a6abd9a94e08dfc70d5ce47376d10afc100f4839c
BLAKE2b-256 checksum
How to use checksums
1d9dccbca7caea2b2b9c0b09e6b2698643daa447ea3f90b460169ae23c0c0daa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.23.4 CPython/3.6.7

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page