#!/bin/sh # # Apunta datos interactivamente. # # Estructura del archivo con información sobre cada tabla y primera línea de este archivo: # # Name # File # AddDate # AddTime # Separator # Prompts... # El primer caracter de esta primera línea se toma como el caracter de separación entre campos. # AddDate y AddTime son verdaderos cuando su valor es 'y' y falsos en cualquier otro caso. # Los _ en los prompts se sustituyen por espacios storesDataFile="$HOME/data/stores.dat" [ ! -f "$storesDataFile" ] && printf "Error: store data file \"${storesDataFile}\" not found.\n" >&2 && exit 1 dataFileSeparator="$(sed '1q' "$storesDataFile" | grep -Eo '^.')" blankLineMarker='@BLANKLINEMARKER@' gatherData () { shift 1 # table name file="$1" shift 1 addDate='' [ "$1" = 'y' ] && addDate='-d' shift 1 addTime='' [ "$1" = 'y' ] && addTime='-t' shift 1 separator="$1" [ "$1" = "$blankLineMarker" ] && separator="' '" shift 1 data='' for prompt in "$@"; do fixedPrompt=$(echo "$prompt" | tr '_' ' ') printf "${fixedPrompt}: " >&2 read newData [ -z "$newData" ] && exit 1 data="${data} ${newData}" done store.sh -f "'${file}'" "$addDate" "$addTime" -s "$separator" $data } table="$(grep -Eo "^[^${dataFileSeparator}]+" "$storesDataFile" | fzf)" [ -z "$table" ] && exit 0 tableLine="$(grep "^${table}${dataFileSeparator}" "$storesDataFile")" tableData=$(echo $tableLine | tr "$dataFileSeparator" '\n' | sed "s/^\s*$/${blankLineMarker}/") gatherData $tableData