GNU/Linux >> Znalost Linux >  >> Linux

Externí proměnná v Awk?

Tato otázka zde již obsahuje odpovědi :Uzavřeno před 8 lety.

Možný duplikát:
Použijte parametr skriptu v awk

Mám skript, ve kterém je úryvek skriptu

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

externí proměnná je x,

ale zobrazí chybu v awk

jak tedy v této situaci zajistit, aby awk úspěšně běžel?

díky!

Přijatá odpověď:

Proměnná shellu je právě to:a shell proměnná . Chcete-li z něj udělat awk proměnnou, potřebujete syntaxi jako:

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

nebo

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

Ty však trpí problémem:escape sekvence jsou v nich rozšířeny (a pomocí GNU awk 4.2 nebo vyšší, pokud $x začíná @/ a končí na / , je považována za proměnnou typu regulárního výrazu).

Pokud tedy například proměnná shellu obsahuje dva znaky zpětné lomítko a n , proměnná awk bude obsahovat nový řádek znak (a s gawk 4.2+, pokud obsahuje @/foo/ , proměnná awk bude obsahovat foo a musí být typu regexp ).

Dalším přístupem (který však vyžaduje POSIX awk nebo nawk (na rozdíl od původního awk, který se stále vyskytuje na několika lichých Unicích)) je použití proměnných prostředí:

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

Dalším přístupem (stále s novějšími awks) je použití pole ARGV v awk:

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

Linux
  1. Bash skriptování (I)

  2. Jak provést nepřímé vyhodnocení proměnných?

  3. `$?` ? Je to proměnná?

  1. 4 Příklady prohlášení Awk If ( if, if else, if else if, :? )

  2. AWK vs NAWK vs GAWK

  3. Použití grep vs awk

  1. Průvodce pro začátečníky koukáním

  2. $path Variable Env Variable?

  3. bash - shoda proměnné bez ohledu na velikost písmen