En realidad está en POSIX awk
(enlace a POSIX 2008, las versiones anteriores también lo tenían, creo). -v
se describe en la sección Opciones , la otra forma está en la sección Operandos .
Hay una diferencia entre -v
y pasar las tareas al final con los nombres de archivo:
La aplicación garantizará que el argumento de asignación tenga la misma forma que un operando de asignación. La asignación de la variable especificada debe ocurrir antes de ejecutar el programa awk, incluidas las acciones asociadas con los patrones BEGIN (si corresponde). Se pueden especificar múltiples ocurrencias de esta opción.
- Mezclado con los nombres de archivo:
[...] Cada asignación variable de este tipo debe ocurrir justo antes del procesamiento del siguiente archivo , si corresponde. Por lo tanto, una asignación antes del primer argumento del archivo se ejecutará después de las acciones BEGIN (si corresponde), mientras que una asignación después del último argumento del archivo ocurrirá antes de las acciones END (si corresponde). Si no hay argumentos de archivo, las asignaciones se ejecutarán antes de procesar la entrada estándar.
Ejemplo:
$ cat input
hello
hello
$ awk -v var=one 'BEGIN{print var} /hello/{print var} END{print var}' \
var=two input var=three input var=four
one
two
two
three
three
four