This is an old revision of the document!
Table of Contents
task boiler
Place to cook the tasks. Once they are boiled enough, move them to a separate plate.
Start the first heading with “=====”
apply unix commands to all but the first line
Situation
Let's say we want to sort a series of numbers in descending order but keep the header at the top. For example, given
$ echo -e "value\n8\n2\n6\n3" value 8 2 6 3
we want to output
value 2 3 6 8
We can't directly use 'sort' since it will sort the header as well.
$ echo -e "value\n8\n2\n6\n3" | sort 2 3 6 8 value
bare bones solution
Create a script called 'body' with the following contents
#!/usr/bin/env bash # # body: apply expression to all but the first line. # Use multiple times in case the header spans more than one line. # # Example usage: # $ echo -e "value\n8\n2\n6\n3" | body sort # IFS= read -r header printf '%s\n' "$header" "$@"
Make it executable
chmod +x body
place it somewhere in your PATH (say ~/bin)
mv body ~/bin
This script will apply any unix command to all but the first line. For example, using it on our example
$ echo -e "value\n8\n2\n6\n3" | body sort value 2 3 6 8
practical solution
I got the above script from https://github.com/jeroenjanssens/dsutils/blob/master/body . The underlying repository (https://github.com/jeroenjanssens/dsutils) contains many such useful scripts (ex:- header - to add, replace, and delete header lines). A more practical approach is to clone the entire repository and add the repo location to your PATH.