2019-09-02 00:52:02 +00:00
|
|
|
# Choose
|
|
|
|
|
|
|
|
This is `choose`, a human-friendly alternative to `awk` and `cut`
|
|
|
|
|
|
|
|
## Rationale
|
|
|
|
|
|
|
|
The AWK programming language is designed for text processing and is extremely
|
|
|
|
capable in this endeavor. However, the `awk` command is not ideal for rapid
|
|
|
|
shell use, with its requisite quoting of a line wrapped in curly braces, even
|
|
|
|
for the simplest of programs:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
awk '{print $1}'
|
|
|
|
```
|
|
|
|
|
|
|
|
Likewise, `cut` is far from ideal for rapid shell use, because it is difficult
|
|
|
|
to get the confusing syntax correct on the first attempt. Field separators and
|
|
|
|
ranges are just plain difficult to use.
|
|
|
|
|
|
|
|
It is for these reasons that I present to you `choose`. It is not meant to be a
|
|
|
|
drop-in or complete replacement for either of the aforementioned tools, but
|
|
|
|
rather a simple and intuitive tool to reach for when the basics of `awk` or
|
|
|
|
`cut` will do, but the overhead of getting them to behave should not be
|
|
|
|
necessary.
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
2019-09-12 02:57:44 +00:00
|
|
|
```
|
|
|
|
`choose` sections from each line of files
|
2019-09-02 00:52:02 +00:00
|
|
|
|
2019-09-12 02:57:44 +00:00
|
|
|
USAGE:
|
|
|
|
choose [FLAGS] [OPTIONS] <choice>...
|
2019-09-02 00:52:02 +00:00
|
|
|
|
2019-09-12 02:57:44 +00:00
|
|
|
FLAGS:
|
|
|
|
-d, --debug Activate debug mode
|
|
|
|
-h, --help Prints help information
|
|
|
|
-n, --inclusive Use inclusive ranges
|
|
|
|
-V, --version Prints version information
|
|
|
|
|
|
|
|
OPTIONS:
|
|
|
|
-f, --field-separator <field-separator> Specify field separator other than whitespace
|
|
|
|
-i, --input <input> Input file
|
|
|
|
|
|
|
|
ARGS:
|
|
|
|
<choice>... Fields to print. Either x, x:, :y, or x:y, where x and y are integers, colons indicate a range,
|
|
|
|
and an empty field on either side of the colon continues to the beginning or end of the line.
|
2019-09-02 00:52:02 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
### Examples
|
|
|
|
|
|
|
|
```bash
|
|
|
|
choose 5 # print the 5th item from a line (zero indexed)
|
2019-09-14 02:11:45 +00:00
|
|
|
|
2019-09-02 00:52:02 +00:00
|
|
|
choose -f ':' 0 3 5 # print the 0th, 3rd, and 5th item from a line, where
|
|
|
|
# items are separated by ':' instead of whitespace
|
2019-09-14 02:11:45 +00:00
|
|
|
|
2019-09-02 00:52:02 +00:00
|
|
|
choose 2:5 # print everything from the 2nd to 5th item on the line,
|
|
|
|
# exclusive of the 5th
|
2019-09-14 02:11:45 +00:00
|
|
|
|
2019-09-12 02:57:44 +00:00
|
|
|
choose -n 2:5 # print everything from the 2nd to 5th item on the line,
|
2019-09-02 00:52:02 +00:00
|
|
|
# inclusive of the 5th
|
2019-09-14 02:11:45 +00:00
|
|
|
|
2019-09-02 00:52:02 +00:00
|
|
|
choose :3 # print the beginning of the line to the 3rd item,
|
|
|
|
# exclusive
|
2019-09-14 02:11:45 +00:00
|
|
|
|
2019-09-02 00:52:02 +00:00
|
|
|
choose 3: # print the third item to the end of the line
|
|
|
|
```
|
2019-09-17 21:17:43 +00:00
|
|
|
|
|
|
|
## Compilation and Installation
|
|
|
|
|
|
|
|
In order to build `choose` you will need rust installed, and you can find
|
|
|
|
instructions for that [here](https://www.rust-lang.org/tools/install).
|
|
|
|
|
|
|
|
Then, to install:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
git clone https://github.com/theryangeary/choose.git
|
|
|
|
cd choose
|
|
|
|
cargo build --release
|
|
|
|
install target/release/choose <DESTDIR>
|
|
|
|
```
|
|
|
|
|
|
|
|
Just make sure DESTDIR is in your path.
|