386 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.

0voto

Sina Punkte 401

Ich musste das Datum am Anfang der Zeilen einer Protokolldatei einfügen und es ist wie folgt erledigt:

DATE=$(date +"%Y-%m-%d")
awk '{ print "'"$DATE"'", $0; }' /path_to_log_file/log_file.log

Es kann in eine andere Datei umgeleitet werden, um es zu speichern

-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