Crates.io | excavate |
lib.rs | excavate |
version | 0.3.0 |
source | src |
created_at | 2023-01-12 12:00:25.459735 |
updated_at | 2023-01-12 22:36:58.446054 |
description | A command line tool to excavate fields from multi-column texts. |
homepage | |
repository | |
max_upload_size | |
id | 757077 |
size | 52,158 |
A command line tool to excavate columns from multi-column texts.
excavate
is a simple program that does one specific job, getting and printing the specified column, line-by-line reading from standard input. This is a job that can be done by some more sophisticated programs, e.g. awk
or sed
, but having the memory capacity of a goldfish, I never could recall their syntax when I need to. Personally, I frequently need the fetching of a column, and infrequently need anything that requires the rich feature-set offered by those tools. That's my rationale for creating this highly specialized, simplistic, one-trick-pony program.
excavate <COLUMNS>
<COLUMNS>
is supplied in the format of comma delimited list. Each item can be a positive integer, or a range in the format of "a-b". At least one column must be specified. The column ID starts from 0 (first column is 0, the second 1, etc.). The range "a-b" includes both end, with "a" being the lower end, and "b" the higher end. If "a" is greater than "b", the range is empty (selects no column).
For example:
fields | Description |
---|---|
0 | Select the first column |
0-2 | Select the first three columns |
0,3,5 | Select the first, the fourth, and the sixth column |
0-3,5 | Select the first four columns, and the sixth column |
For example:
Printing the all the process IDs matching "bash":
$ ps aux | grep bash
henry 7308 0.0 0.0 8988 5652 pts/3 S+ 12:03 0:00 bash
henry 7482 0.0 0.0 8988 5500 pts/4 S+ 12:03 0:00 bash
henry 7656 0.0 0.0 8988 5540 pts/5 S+ 12:03 0:00 bash
henry 8776 0.0 0.0 6564 2176 pts/1 S+ 12:08 0:00 grep --color=auto bash
$ ps aux | grep bash | excavate 1
7308
7482
7656
8826
The columns, regardless of your input order, will always be printed from low to high, i.e. from left to right in the table, and duplicates are ignored. excavate 1,2
is equivalent to excavate 2,1,1
.
If a line has not enough columns, excavate
ignores any field beyond the limit. For instance, running excavate 2,10
against the input bob alice eve
gets you eve
. Running it against bob alice
gets you a blank line. The output always has the same number of lines as the input, even if some of them are empty.
At the moment, the program can be installed via cargo
:
cargo install excavate
excavate
has only Rust dependencies, clap
and nom
. There's no external dependencies. Clone this repository, and run
cargo build