awkg is an awk-like text-processing tool powered by python language
Project description
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 fieldsNR
: Record numberR
: An array having all the columns of current record.R0
: analogous to$0
it stores the input line before splitting intoR
; since python does not permit$
in the identifiers, it is renamed asR0
RET
: When this variable is set to Truth value oftrue
implicitprint(*R)
is triggeredFS
: Input Field separatorOFS
: Output Field separator; Unless explicitly set,OFS=FS
ORS
: Output Record separatorRS
(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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file awkg-0.3.0.tar.gz
.
File metadata
- Download URL: awkg-0.3.0.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c0d5da9ef06a4aa588537c8c5e0565da2c73ee7be98cc32b468d092cadce91f3 |
|
MD5 | 4085db218d59b3effead700c35ecd71b |
|
BLAKE2b-256 | 5f437490109172a0f2a1ec0e6a6a411b27b7758feec43cc4f97c30da9b665adf |
File details
Details for the file awkg-0.3.0-py3-none-any.whl
.
File metadata
- Download URL: awkg-0.3.0-py3-none-any.whl
- Upload date:
- Size: 18.3 kB
- Tags: Python 3
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b42363a4975ca4607ff154a6abd9a94e08dfc70d5ce47376d10afc100f4839c |
|
MD5 | 097e031099cab120b595f69d631a21bb |
|
BLAKE2b-256 | 1d9dccbca7caea2b2b9c0b09e6b2698643daa447ea3f90b460169ae23c0c0daa |