Czytałem ten skrypt awk
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Chcę wiedzieć, jaka jest funkcja 1
na końcu
linux
shell-script
awk
Miraż
źródło
źródło
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
Odpowiedzi:
awk
Program to seria par stan-akcja, warunki będące poza klamrami i działań zamknąć w nich. Warunek jest uważany za fałszywy, jeśli jego wartość wynosi zero lub pusty ciąg, wszystko inne jest prawdziwe (niezainicjowane zmienne to zero lub pusty ciąg, w zależności od kontekstu, więc są one fałszywe). Można założyć albo warunek, albo działanie; nawiasy klamrowe bez warunku (jak zaczyna się Twój) są uważane za mające prawdziwy warunek i są zawsze wykonywane, jeśli zostaną trafione, a każdy warunek bez akcji wypisze linię, jeśli tylko warunek zostanie spełniony.1
Na końcu skryptu jest warunek (zawsze prawdziwe), bez działania, więc wykonuje domyślną akcję dla każdej linii, drukowanie linii (które mogły zostać zmodyfikowane przez poprzedniego działania w szelki).źródło
Naprawdę nie lubię tego typu skrótów, ponieważ zaciemniają i wprowadzają w błąd w jaki sposób są analizowane. Kiedy czytasz coś podobnego
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
, możesz pomyśleć, że1
to modyfikuje poprzednie zdanie. Lub może się wydawać, że1
jest to alias{print}
, co nie jest technicznie poprawne.W rzeczywistości
1
jest to całkowicie osobne stwierdzenie. Możesz rozdzielić takie instrukcje:Każdy format instrukcji awk to
condition {action}
. Jeśli nie{action}
podano, domyślną akcją jest{print}
. (Jeśli niecondition
podano, to domyślnym warunkiem jesttrue
.)Więc tutaj
1
jest warunek, który zawsze ocenia się,true
ponieważ jest niezerowy.action
Zostanie pominięty, więc domyślny{print}
jest wykonywana. Możesz myśleć o tym w ten sposób:źródło
1
oznacza wydrukowanie każdej linii.Instrukcja awk jest taka sama jak pisanie:
źródło