Was bedeutet $0=$1 in awk?

Was bedeutet $0=$1 in awk?

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.txterhalte 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.txtan 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*$4der Variablen zu $0und führt die Standardaktion aus {print $0}, während

 $1*$2" "$3*$4

verkettet die Ergebnisse von $1*$2und $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 $0wird nicht geändert.

Antwort2

in awk

  • $0ist ganze Zeile
  • Die Linie kann im laufenden Betrieb geändert werden

daher

  • $1" "$1*$2" "$3*$4Erstellen Sie 3 Felder $1und $1*$2$3*$4
  • $0=Das Ergebnis wird in die Zeile eingetragen und implizit 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.

verwandte Informationen