Ich habe dieses awk-Skript gelesen
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Ich möchte wissen, was die Funktion 1
am Ende davon ist
linux
shell-script
awk
Randhir Singh
quelle
quelle
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
Antworten:
Ein
awk
Programm besteht aus einer Reihe von Bedingungs-Aktions-Paaren, wobei Bedingungen außerhalb von geschweiften Klammern und Aktionen darin eingeschlossen sind. Eine Bedingung wird als falsch betrachtet, wenn sie als Null oder als leere Zeichenfolge ausgewertet wird, alles andere ist wahr (nicht initialisierte Variablen sind je nach Kontext Null oder leere Zeichenfolge, also falsch). Es kann entweder eine Bedingung oder eine Aktion impliziert werden. Klammern ohne Bedingung (wie Ihre beginnen) gelten als echte Bedingung und werden immer ausgeführt, wenn sie getroffen werden. Bei jeder Bedingung ohne Aktion wird die Zeile genau dann gedruckt, wenn die Bedingung erfüllt ist.Das
1
Ende Ihres Skripts ist eine Bedingung (immer wahr) ohne Aktion, daher 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).quelle
Ich mag solche Verknüpfungen wirklich nicht, weil sie die Art und Weise, wie sie analysiert werden, verschleiern und in die Irre führen. Wenn Sie so etwas lesen
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
, denken Sie vielleicht, dass1
die vorherige Anweisung geändert wird. Oder Sie denken vielleicht, es1
handelt sich um einen Alias für{print}
, der technisch nicht korrekt ist.In Wirklichkeit
1
handelt es sich um eine völlig separate Aussage. Sie können die Anweisungen wie folgt trennen:Jedes awk-Anweisungsformat ist
condition {action}
. Wenn dies nicht{action}
angegeben ist, lautet die Standardaktion{print}
. (Wenn dies nichtcondition
angegeben ist, lautet die Standardbedingungtrue
.)Hier
1
ist also die Bedingung, die immertrue
als ungleich Null ausgewertet wird. Dasaction
wird weggelassen, so dass der Standard{print}
durchgeführt wird. Sie können sich das so vorstellen:quelle
1
bedeutet, jede Zeile zu drucken.Die awk-Anweisung ist dasselbe wie das Schreiben:
quelle