Jest to mniej więcej pytanie uzupełniające do następujących dwóch:
- Błąd składniowy podczas usuwania zduplikowanych linii za pomocą pliku awk '! X [$ 0] ++'
- awk / nawk alternatywa dla SunOs i Linux
Widzę, że w systemie Solaris 10 (SunOS 5.10) otrzymuję następujące wyniki:
$ type -a awk
awk is /usr/bin/awk
$ PATH="$(getconf PATH)" type -a awk
awk is /usr/xpg4/bin/awk
awk is /usr/bin/awk
$
W /usr/bin/awk
systemie Solaris 10 nie akceptuje standardowej składni awk POSIX, takiej jak '!x[$0]++'
, ale akceptuje /usr/xpg4/bin/awk
. Jak dotąd wystarczająco dobry.
Jednak w Solaris 11 jest /usr/bin/awk
nawet z getconf PATH
. Chociaż istnieje nawk
i oawk
jest /usr/bin
, najwyraźniej nie są wskazywane przez dowiązania symboliczne z dowolnego miejsca.
To, że Solaris ma certyfikat POSIX, zaskoczyło mnie.
Jak mogę uzyskać Awk zgodny ze standardem POSIX w systemie Solaris 11 przy użyciu przenośnego kodu, który będzie działał również w innych systemach zgodnych z POSIX? (Albo jest jedyną opcją, aby sprawdzić istnienie nawk
albo oawk
i użyć jednego z nich, jeśli obecny?)
Co do tego, czym są nawk
i oawk
?
/usr/xpg4/bin/awk
nie ma w Solaris 11?nawk
jest „nowyawk
”, ulepszony AT&Tawk
.Odpowiedzi:
W przypadku pełnej lub stacjonarnej instalacji Solaris 11 dostępne są trzy
awk
implementacje plus niektóre warianty:Wszystkie są „zgodne ze standardami”, choć są zgodne z różnymi standardami.
/usr/bin/awk
jest zgodny ze starsząawk
implementacją UNIX wydaną w 1977 r. Jest przechowywany jako pierwszy w domyślnym systemie PATH, aby nie łamać istniejących skryptów, ponieważ kolejneawk
wydania przerywają kompatybilność.oawk
jest synonimemawk
/usr/bin/nawk
jest „nową” wersjąawk
, po raz pierwszy dostarczoną w SVR3.1 w 1986 roku.Awk
Standard POSIX został oparty na tej implementacji./usr/xpg4/bin/awk
jest prawie identyczny z pierwszym, ale ten jest formalnie sprawdzany pod kątem testów sprawdzania zgodności z POSIX./usr/gnu/bin/awk
,/usr/bin/gawk
jest również wariant GNUawk
. Ma na celu zachowanie zgodności z większością lub wszystkimi standardami POSIX, gdy zmienna środowiskowaPOSIXLY_CORRECT
jest ustawiona w środowisku lub gdy jest wywoływana z-W posix
opcją, ale poza tym dodaje wiele specyficznych własnych rozszerzeń.igawk
ipgawk
same są rozszerzeniamigawk
, pierwszy obsługuje pliki, a drugi obsługuje profilowanie.Zobacz także rozdział historii GNU,
awk
aby uzyskać wiele przydatnych informacji.core-os
Gwarantowane jest, że tylko pakiety będą obecne podczas regularnej instalacji Solaris 11, więc tylkooawk/awk
inawk
tam są. W szczególności, gdy tworzysz nową strefę nieglobalną , domyślnie zawiera onasolaris-small-server
pakiet grupowy, więcxpg4
anignu
awk
binaria, ani binaria nie są dostępne. To jest z założenia.solaris-small-server
Grupa jest minimalny punkt startowy, do którego dodać wymagane pakiety dla aplikacji, aby działać poprawnie. Jest to bardziej bezpieczne i wydajne niż poprzedni (Solaris 10) sposób, w którym wszystko zainstalowane w strefie globalnej było również instalowane w strefie innej niż globalna, więc trzeba było usunąć nieużywane pakiety, aby zminimalizować strefę.Aby uzyskać
awk
wsparcie dla POSIX w sposób przenośny w takiej instalacji „małego serwera”, musisz zainstalowaćxcu4
pakiet i ustawić ŚCIEŻKĘ na zgodną z POSIX:Czy należy z jakiegoś powodu nie chcesz, aby zainstalować ten pakiet, obejście tego problemu jest użycie „Custom”
PATH
, zawierającynawk
jakoawk
, na przykład:Alternatywnie możesz zainstalować
GNU awk
i ustawić,PATH
aby najpierw:Pamiętaj, że nie dotyczy to Solaris 11. Podobna grupa pakietów istniała już w systemie Solaris 10 i wcześniejszych, a narzędzia zgodne z POSIX zostały zainstalowane tylko w metaklasach „Użytkownik końcowy”, „Deweloper” i „Pełna instalacja”. Zainstalowanie systemu lub strefy z metaklastrem „Core” lub „Networking support” doprowadziłoby do tego samego
xpg4
brakującego problemu.Należy również zauważyć, że brak
/usr/xpg4/bin/awk
w systemie Solaris 11 nie oznacza błędu zgodności z POSIX. Tylko pełne instalacje Solaris są używane w zdecydowanej większości testów przeprowadzanych przez Oracle i niezależnych dostawców oprogramowania, w tym program certyfikacji Open Group . Zredukowane instalacje są obsługiwane, ale nie kwalifikują się .Jeśli rozpowszechniasz skrypty powłoki (lub aplikacje osadzające skrypty powłoki / wywołujące polecenia powłoki) dla Solaris 11, wystarczy zdefiniować
/system/xopen/xcu4
zależność w pakiecie IPS , a instalator automatycznie zrobi to, co jest wymagane do poprawnego działania skryptu:Zobacz https://docs.oracle.com/cd/E53394_01/html/E54820/dependtypes.html
źródło
awk
jest zawsze obecny w systemie Solaris lub strefie nieglobalnej, więc problem nie dotyczy dostępności, ale ogranicza się do nazwy polecenia (nawk
vsawk
). docs.oracle.com/cd/E53394_01/html/E54763/nawk-1.htmlnawk
jest prawie POSIX (CONVFMT
na przykład nie obsługuje ), ale tak, przynajmniej nie jest tak źle, jakgrep
( na przykład nie ma POSIX-e
/-E
) lubtr
(nie matr a-f A-F
).