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).
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ć, że 1
to modyfikuje poprzednie zdanie. Lub może się wydawać, że 1
jest to alias {print}
, co nie jest technicznie poprawne.
W rzeczywistości 1
jest to całkowicie osobne stwierdzenie. Możesz rozdzielić takie instrukcje:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'
Każdy format instrukcji awk to condition {action}
. Jeśli nie {action}
podano, domyślną akcją jest {print}
. (Jeśli nie condition
podano, to domyślnym warunkiem jest true
.)
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:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'