
Nehmen wir an, ich habe eine Eingabetextdatei (sample_simple.txt) wie diese:
3 1 10 1 6
9 4 2 4 1
9 2 2 2 1
Mit dem folgenden Befehl awk '$0=$1" "$1*$2" "$3*$4' sample_simple.txt
erhalte ich die folgende Ausgabe:
3 3 10
9 36 8
9 18 4
Dann ändert sich mit dem folgenden Befehl awk '$1*$2" "$3*$4' sample_simple.txt
an der Eingabedatei nichts:
3 1 10 1 6
9 4 2 4 1
9 2 2 2 1
Der einzige Unterschied zwischen den Befehlen ist '$0=$1'
: Kann das jemand erklären?
Antwort1
Das ist es nicht wirklich $0=$1
. Betrachten Sie es eher als
$0 = ($1" "$1*$2" "$3*$4)
Also
$0=$1" "$1*$2" "$3*$4
weist das Ergebnis der Zeichenkettenverkettung $1" "$1*$2" "$3*$4
der Variablen zu $0
und führt die Standardaktion aus {print $0}
, während
$1*$2" "$3*$4
verkettet die Ergebnisse von $1*$2
und $3*$4
(mit einem Leerzeichen " "
dazwischen) und führt die Standardaktion aus, {print $0}
da das Ergebnis eine nicht leere Zeichenfolge ist. Der Wert von $0
wird nicht geändert.
Antwort2
in awk
$0
ist ganze Zeile- Die Linie kann im laufenden Betrieb geändert werden
daher
$1" "$1*$2" "$3*$4
Erstellen Sie 3 Felder$1
und$1*$2
$3*$4
$0=
Das Ergebnis wird in die Zeile eingetragen undimplizit ausgedruckt(siehe Bearbeiten).
Bearbeiten :
Wenn Sie weglassen $0=
, wird die Ausgabezeile nicht geändert.
Wie Steeldriver hervorhob, wird die Zeile gedruckt, da die Suche positiv ist.