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

Was bedeutet 1 am Ende des awk-Skripts?

Ein awk Programm ist eine Reihe von Bedingungs-Aktions-Paaren, wobei Bedingungen außerhalb von geschweiften Klammern stehen und Aktionen darin eingeschlossen sind. Eine Bedingung gilt als falsch, wenn sie Null oder eine leere Zeichenfolge ergibt, alles andere ist wahr (nicht initialisierte Variablen sind je nach Kontext null oder eine leere Zeichenfolge, also sind sie falsch). Es kann entweder eine Bedingung oder eine Aktion impliziert werden; geschweiften Klammern ohne Bedingung (wie Ihre beginnt) gelten als wahre Bedingung und werden immer ausgeführt, wenn sie getroffen werden, und jede Bedingung ohne Aktion druckt die Zeile nur dann, wenn die Bedingung erfüllt ist.

Die 1 am Ende Ihres Skripts ist eine Bedingung (immer wahr) ohne Aktion, also führt es die Standardaktion für jede Zeile aus und gibt die Zeile aus (die möglicherweise durch die vorherige Aktion in geschweiften Klammern geändert wurde).


Ich mag diese Art von Abkürzungen wirklich nicht, weil sie verschleiern und irreführen, wie sie analysiert werden. Wenn Sie etwas wie awk -F"=" '{OFS="=";gsub(",",";",$2)}1' lesen , könnten Sie denken, dass die 1 ändert die vorherige Aussage. Oder Sie denken vielleicht an 1 ist ein Alias ​​für {print} , was technisch nicht korrekt ist.

Eigentlich 1 ist eine ganz eigene Aussage. Sie können die Anweisungen wie folgt trennen:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'

Jedes awk-Anweisungsformat ist condition {action} . Wenn es kein {action} gibt gegeben, dann ist die Standardaktion {print} . (Falls kein condition vorhanden ist gegeben, dann ist die Standardbedingung true .)

Also hier, 1 ist die Bedingung, die immer zu true ausgewertet wird da es nicht null ist. Die action wird weggelassen, daher der Standardwert {print} ist durchgeführt. Sie können sich das so vorstellen:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'

1 bedeutet, jede Zeile zu drucken.

Die awk-Anweisung entspricht dem Schreiben von:

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'

Linux
  1. Was bedeutet kaufmännisches Und am Ende einer Shell-Skriptzeile?

  2. Die Bedeutung von $? In einem Shell-Skript?

  3. Was bedeutet POSIX?

  4. Was macht die Zeile '!/bin/sh -e'?

  5. Was sind die Unterschiede zwischen grep, awk und sed?

Was bedeutet *nix?

Was bedeuten fork() und grep unter Linux?

Was bedeutet „auf der schwarzen Liste“ bei GStreamer?

Was ist der schnellste Weg, um ein Skript auszuführen?

Was bedeutet curl -k -i -X ​​unter Linux?

Was bedeutet ein + am Ende der Berechtigungen von ls -l?