GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Externe Variable in Awk?

Für diese Frage gibt es hier bereits Antworten :Vor 8 Jahren geschlossen.

Mögliches Duplikat:
Verwenden Sie einen Skriptparameter in awk

Ich habe ein Skript, in dem sich ein Skript-Snippet befindet

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

die externe Variable ist x,

aber es führt zu einem Fehler in awk

Wie kann man in dieser Situation awk erfolgreich ausführen?

danke!

Akzeptierte Antwort:

Eine Shell-Variable ist genau das:eine Shell Variable . Wenn Sie daraus ein awk machen möchten Variable benötigen Sie eine Syntax wie:

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

oder

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

Diese leiden jedoch unter einem Problem:Escape-Sequenzen werden in ihnen erweitert (und mit GNU awk 4.2 oder höher, wenn $x beginnt mit @/ und endet mit / , es wird als eine Regexp-Variable behandelt).

Also zB wenn die Shell-Variable die beiden Zeichen Backslash enthält und n , enthält die awk-Variable am Ende den Zeilenumbruch Zeichen (und mit gawk 4.2+, wenn es @/foo/ enthält , enthält die awk-Variable foo und vom Typ regexp sein ).

Ein anderer Ansatz (der aber ein POSIX-awk oder nawk erfordert (im Gegensatz zum ursprünglichen awk, das immer noch auf einigen ungeraden Unices zu finden ist)) ist die Verwendung von Umgebungsvariablen:

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

Ein anderer Ansatz (immer noch mit neueren awks) ist die Verwendung des ARGV-Arrays in awk:

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

Linux
  1. Eine Anleitung für Anfänger zum gawk

  2. Wie wird eine indirekte Variablenauswertung durchgeführt?

  3. `$?` ? Ist es eine Variable?

  4. $path-Variable Env-Variable?

  5. 4 Beispiele für Awk-If-Anweisungen ( if, if else, if else if, :? )

Bash-Exportvariable

AWK-Befehl in Linux mit Beispielen

So fügen Sie ownCloud 9 externen Speicher hinzu

Awk-Befehl unter Linux

So installieren Sie Maven unter Windows

chmod ein frisch gemountetes externes Laufwerk, um den Schreibzugriff einzurichten