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)
|
|
|
|
choose -f ':' 0 3 5 # print the 0th, 3rd, and 5th item from a line, where
|
|
|
|
# items are separated by ':' instead of whitespace
|
|
|
|
choose 2:5 # print everything from the 2nd to 5th item on the line,
|
|
|
|
# exclusive of the 5th
|
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
|
|
|
|
choose :3 # print the beginning of the line to the 3rd item,
|
|
|
|
# exclusive
|
|
|
|
choose 3: # print the third item to the end of the line
|
|
|
|
```
|