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!

¿Fue útil?

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 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top