409 Stimmen

Wie verwende ich Shell-Variablen in einem Awk-Skript?

Ich habe einige Möglichkeiten gefunden, externe Shell-Variablen an ein awk-Skript zu übergeben, aber ich bin verwirrt über ' und ".

Zuerst habe ich es mit einem Shell-Skript versucht:

$ v=123test
$ echo $v
123test
$ echo "$v"
123test

Dann habe ich es mit awk versucht:

$ awk 'BEGIN{print "'$v'"}'
$ 123test
$ awk 'BEGIN{print '"$v"'}'
$ 123

Warum gibt es einen Unterschied?

Zuletzt habe ich dies versucht:

$ awk 'BEGIN{print " '$v' "}'
$  123test
$ awk 'BEGIN{print ' "$v" '}'
awk: cmd. line:1: BEGIN{print
awk: cmd. line:1:             ^ unerwartete neue Zeile oder Ende des Strings 

Das verwirrt mich.

1voto

edib Punkte 674

Ich habe die Antwort von @Jotne für die "for-Schleife" geändert.

for i in `seq 11 20`; do host myserver-$i | awk -v i="$i" '{print "myserver-"i" " $4}'; done

-1voto

ibitebyt3s Punkte 3002

Profi-Tipp

Es könnte praktisch sein, eine Funktion zu erstellen, die dies behandelt, damit Sie nicht jedes Mal alles eingeben müssen. Mit der ausgewählten Lösung erhalten wir...

awk_switch_columns() {
     cat < /dev/stdin | awk -v a="$1" -v b="$2" " { t = \$a; \$a = \$b; \$b = t; print; } "
}

Und verwenden Sie es wie folgt...

echo 'a b c d' | awk_switch_columns 2 4

Ausgabe:
a d c b

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X