Invocar un script, que tiene un shebang awk, con parámetros (vars)
Pregunta
Tengo un script awk que he definido así:
#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }
Lo he guardado como columnas
y chmod + x
'd. Quiero invocarlo para que start
y end
se definan a medida que atraviesa un archivo. Estaba pensando que esto debería funcionar:
cat some_file | columns -v start=2
Pero no lo hace. Ayuda!
Solución
Intenta usar:
#!/usr/bin/awk -f
como intérprete
Otros consejos
env es la forma más fácil de manejar este problema:
#!/usr/bin/env -S awk -f
para agregar más opciones y para garantizar que no haya interferencia con sus argumentos y los argumentos de awk:
#!/usr/bin/env -S awk -F: -f ${_} --
BEGIN {
# delete argv[1], which == ENVIRON[_]
delete ARGV[1]
} # rest of my awk program
como env tiene un estándar POSIX, este shbang debería ayudarlo a superar las dificultades de las implementaciones de shbang no estándar en unixen.
EDIT
después de haber escrito esto me di cuenta de que '-S' es una extensión env de FreeBSD no compatible con POSIX . Por lo tanto, el envoltorio de shell es probablemente el camino a seguir, por desafortunado que sea.
A continuación se encuentra la respuesta a este problema:
#!/bin/awk -f