GNU/Linux >> Tutoriales Linux >  >> Linux

Variable externa en Awk?

Esta pregunta ya tiene respuestas aquí :Cerrado hace 8 años.

Posible duplicado:
Usar un parámetro de secuencia de comandos en awk

Tengo un script, en el que se encuentra un fragmento de script

x=3
awk '$2=$x{print $1}' infile

la variable externa es x,

pero genera un error en awk

entonces, en esta situación, ¿cómo hacer que awk se ejecute correctamente?

¡gracias!

Respuesta aceptada:

Una variable de shell es solo eso:un shell variables . Si quieres convertirlo en un awk variable, necesita una sintaxis como:

awk -v x="$x" '$2 == x {print $1}' infile

o

awk '$2 == x {print $1}' x="$x" infile

Sin embargo, tienen un problema:las secuencias de escape se expanden en ellos (y con GNU awk 4.2 o superior, si $x comienza con @/ y termina en / , se trata como un tipo de variable de expresión regular).

Entonces, por ejemplo, si la variable de shell contiene los dos caracteres barra invertida y n , la variable awk terminará conteniendo la nueva línea carácter (y con gawk 4.2+, si contiene @/foo/ , la variable awk contendrá foo y ser del tipo regexp ).

Otro enfoque (pero que requiere un POSIX awk o nawk (a diferencia del awk original que todavía se encuentra en algunos Unices impares)) es usar variables de entorno:

x="$x" awk '$2 == ENVIRON["x"] {print $1}' infile

Otro enfoque (todavía con awks más nuevos) es usar la matriz ARGV en awk:

awk 'BEGIN {x = ARGV[1]; delete ARGV[1]}
  $2 == x {print $1}' "$x" infile

Linux
  1. Una guía para principiantes de Gawk

  2. `$?` ? ¿Es una variable?

  3. 4 Ejemplos de sentencias If de Awk (if, if else, if else if, :? )

  4. AWK contra NAWK contra GAWK

  5. chmod una unidad externa recién montada para configurar el acceso de escritura

Usa awk para calcular la frecuencia de las letras

Variable de exportación de bash

Comando AWK en Linux con ejemplos

Cómo agregar almacenamiento externo a ownCloud 9

Comando Awk en Linux

Cómo instalar Maven en Windows