GNU/Linux >> Linux Esercitazione >  >> Linux

Variabile esterna in Awk?

Questa domanda ha già risposte qui :Chiuso 8 anni fa.

Possibile duplicato:
Utilizza un parametro di script in awk

Ho uno script, in cui è presente uno snippet di script

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

la variabile esterna è x,

ma viene visualizzato un errore in awk

quindi in questa situazione, come far funzionare correttamente awk?

grazie!

Risposta accettata:

Una variabile di shell è proprio questo:una shell variabile . Se vuoi trasformarlo in un awk variabile, è necessaria una sintassi come:

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

o

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

Tuttavia, quelli soffrono di un problema:le sequenze di escape sono espanse al loro interno (e con GNU awk 4.2 o superiore, se $x inizia con @/ e termina con / , viene trattata come un tipo di variabile regexp).

Quindi, ad esempio, se la variabile shell contiene i due caratteri barra rovesciata e n , la variabile awk finirà per contenere il newline carattere (e con gawk 4.2+, se contiene @/foo/ , la variabile awk conterrà foo ed essere di tipo regexp ).

Un altro approccio (ma che richiede un POSIX awk o nawk (al contrario dell'originale awk che si trova ancora su alcuni Unice dispari)) consiste nell'utilizzare variabili di ambiente:

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

Un altro approccio (sempre con awks più recenti) consiste nell'usare l'array ARGV in awk:

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

Linux
  1. Come eseguire la valutazione indiretta delle variabili?

  2. `$?` ? È una variabile?

  3. AWK Vs NAWK Vs GAWK

  4. Alias ​​con variabile in bash

  5. Inversione del contenuto di una variabile tramite parole

Variabile di esportazione Bash

Comando AWK in Linux con esempi

Come aggiungere memoria esterna a ownCloud 9

Comando Awk in Linux

Come installare Maven su Windows

Usando grep vs awk