miércoles, 3 de agosto de 2011

Menú loco v0.1

El comando select de shell es muy copado (lean el man).
Por ejemplo:

select file in main.c functions.c config.h
do
vim $file
done

Pero tiene la desgracia de
  1. Usar números para las opciones
  2. Necesitar ^C para salir (a menos que pongamos una opción que tendrá un número para elegirla)
Entonces, les presento un minitruquín the groncher, the better para evitar ambos problemas:

function menu {
keyword=$1
echo
echo "Elija opción: "
grep "# $keyword" $0 | fgrep -v grep | sed "s/;;.*//"
}

while :
do
menu File
read -n1 op
case $op in
f) file=main.c ;; # File
c) file=functions.c ;; # File
r) file=config.h ;; # File
q) echo ; exit ;; # File
*) continue;;
esac

vim $file
done

Sí... la presentación de las opciones del menú son comandos unix, no son nombrecitos.
Se invita a los señores lectores a proponer la v0.2

lunes, 1 de agosto de 2011

Sacame lo' yuyo'

vim: "Eliminá todas las líneas que digan 'GO' desde el renglón actual hasta el renglón que dice 'end'"

:.,/end/g/GO/d

Les dejo el abracadabra y el que tenga curiosidad que lo investigue.

jueves, 9 de junio de 2011

Estupidez svn

function svnInfo {
att="$*"
svn info | grep "$att" | sed "s/$att: //g"
}

lastrev=$(svnInfo "Last Changed Rev")
rev=$(svnInfo "Revision")

miércoles, 18 de mayo de 2011

Sum by

Para calcular cuántas horas por día trabajo, necesité una especie de sum(horas) GROUP BY día a partir del siguiente input de horas por tarea:

$ donetasks
2011-05-17 1.00 FrancesGO2 -> Schedule
2011-05-17 4.50 FrancesGO2 -> Deployment
2011-05-17 1.50 FrancesGO2 -> Sysadmin, environments
2011-05-17 0.50 FrancesGO2 -> Analisis Funcional
2011-05-17 0.50 FrancesGO2 -> Meetings
2011-05-17 1.00 FrancesGO2 -> Tooling
2011-05-18 0.50 FrancesGO2 -> Deployment

Decidí que el Aho, Weinberger y Kernighan vendrían al rescate. Hice un script que llamé sumby que toma los índices de dos columnas: por cuál agrupar, y cuál sumar:

awk -v group=$1 -v sum=$2 '
{ bag[$group]+=$sum }
END { for (val in bag) { print val ": " bag[val] } }
'

Lo uso así:

$ donetasks | sumby 1 2
2011-05-17: 9
2011-05-18: 0.5