diff options
Diffstat (limited to 'bin/spt')
-rwxr-xr-x | bin/spt | 55 |
1 files changed, 55 insertions, 0 deletions
@@ -0,0 +1,55 @@ +#!/bin/bash + +### +# Single pass tabulate. +# +# Turn grid-aligned tables into tab-separated values +# using the first line as a template. +# Pre-existing tabs are preserved, +# which is probably not good. +## +# TODO: +# - Optionally require more than one space for column separation. + +shopt -s extglob + +spitline(){ + declare -i prevtab=0 + for tabstop in ${tabstops[@]} + do + # Strip trailing spaces. + field=${line:$prevtab:$((tabstop-prevtab))} + field=${field%%*( )} + printf '%s\t' "$field" + prevtab=$tabstop + done + printf '%s\n' "${line:$prevtab}" +} + +## +# First line: +## +# The tab stops are where stretches of empty space end. +IFS=$'\n' +read -r firstline +declare -i skip=1 +for ((i=0;i<${#firstline};i++)) +do + case ${firstline:$i:1} in + \ ) + skip=0 + ;; *) + [[ $skip -eq 0 ]] && tabstops+=($i) + skip=1 + esac +done +#echo >&2 ${tabstops[@]} +line=$firstline +spitline + +## +# All other lines: +declare -i prevtab +while read -r line +do spitline +done |