Esta é mais ou menos uma pergunta de acompanhamento para os dois seguintes:
- Erro de sintaxe ao remover linhas duplicadas através do arquivo awk '! X [$ 0] ++'
- alternativa awk / nawk em SunOs e Linux
Vejo que no Solaris 10 (SunOS 5.10), obtenho os seguintes resultados:
$ 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
$
No Solaris 10, /usr/bin/awk
não aceita a sintaxe padrão do Awix do POSIX, como '!x[$0]++'
, mas /usr/xpg4/bin/awk
aceita. Bom o suficiente até agora.
No entanto, no Solaris 11, existe apenas o /usr/bin/awk
mesmo getconf PATH
. Embora haja também nawk
e oawk
é /usr/bin
, estes evidentemente não são apontados por links simbólicos de qualquer lugar.
Saber que o Solaris é certificado pela POSIX, isso me surpreendeu.
Como posso obter um Awk compatível com POSIX no Solaris 11 usando código portátil que também funcionará em outros sistemas compatíveis com POSIX? (Ou é a única opção para verificar a existência nawk
ou oawk
usar um deles, se presente?)
Na verdade, o que são nawk
e oawk
?
/usr/xpg4/bin/awk
não está no Solaris 11?nawk
é "novoawk
", uma AT&T aprimoradaawk
.Respostas:
Em uma instalação completa ou desktop do Solaris 11, há três
awk
implementações disponíveis, além de algumas variantes:Todos são "compatíveis com os padrões", embora estejam em conformidade com diferentes padrões.
/usr/bin/awk
está em conformidade com aawk
implementação legada do UNIX lançada em 1977. É mantido primeiro no PATH do sistema padrão para não interromper os scripts existentes, pois osawk
releases subsequentes quebram a compatibilidade.oawk
é sinônimo deawk
/usr/bin/nawk
é a versão "nova" doawk
, enviada pela primeira vez no SVR3.1 em 1986. OAwk
padrão POSIX foi baseado nessa implementação./usr/xpg4/bin/awk
é quase idêntico ao anterior, mas aquele que é formalmente verificado nos testes de validação de conformidade POSIX./usr/gnu/bin/awk
, também/usr/bin/gawk
é a variante GNU deawk
. Ele visa cumprir a maioria ou todos os padrões POSIX quando a variável de ambientePOSIXLY_CORRECT
é configurada no ambiente ou quando chamada com a-W posix
opção, mas, de outra forma, adiciona inúmeras extensões próprias específicas.igawk
epgawk
são elas próprias extensõesgawk
, o primeiro suporta arquivos incluídos e o segundo suporta a criação de perfil.Veja também o capítulo de história do GNU
awk
para muitas informações úteis.Apenas os
core-os
pacotes têm garantia de presença em uma instalação regular do Solaris 11, portanto, apenasoawk/awk
enawk
estão lá. Em particular, quando você cria uma nova região não global , ela contém por padrão osolaris-small-server
pacote do grupo para quexpg4
nem osgnu
awk
binários nem os estejam disponíveis. Isso ocorre por design. Osolaris-small-server
grupo é um ponto de partida mínimo ao qual você adiciona os pacotes necessários para que seus aplicativos funcionem corretamente. Isso é mais seguro e eficiente do que a maneira anterior (Solaris 10) em que tudo instalado na região global também foi instalado na região não global, portanto, você precisava remover pacotes não utilizados quando desejava minimizar a região.Para obter
awk
suporte POSIX de maneira portátil em uma instalação "pequena", é necessário instalar oxcu4
pacote e definir PATH para o compatível com POSIX:Se, por algum motivo, você não quiser instalar esse pacote, uma solução alternativa é usar um "personalizado"
PATH
contendonawk
comoawk
, por exemplo:Como alternativa, você pode instalar
GNU awk
e configurar o seuPATH
para obtê-lo primeiro:Observe que isso não é específico do Solaris 11. Um agrupamento de pacotes semelhante já existia no Solaris 10 e versões anteriores e os utilitários compatíveis com POSIX foram instalados apenas nos metaclusters "Usuário final", "Desenvolvedor" e "Instalação completa". A instalação de um sistema ou zona com o metacluster "Core" ou "Networking support" levaria ao mesmo
xpg4
problema ausente.Observe também que a falta de
/usr/xpg4/bin/awk
um sistema Solaris 11 não é uma falha de conformidade com POSIX. Somente instalações completas do Solaris são usadas na grande maioria dos testes realizados pela Oracle e ISVs, incluindo o programa de certificação Open Group . Instalações reduzidas são suportadas, mas não qualificadas .Se você distribuir scripts de shell (ou aplicativos que incorporam scripts de shell / comandos de shell de chamada) para o Solaris 11, basta definir
/system/xopen/xcu4
como uma dependência em seu pacote IPS e o instalador fará automaticamente o necessário para que o script funcione corretamente:Consulte https://docs.oracle.com/cd/E53394_01/html/E54820/dependtypes.html
fonte
awk
está sempre presente em um sistema Solaris ou em uma região não global, portanto, o problema não é sobre disponibilidade, mas limitado ao nome do comando (nawk
vsawk
). docs.oracle.com/cd/E53394_01/html/E54763/nawk-1.htmlnawk
é quase POSIX (ele não suporta,CONVFMT
por exemplo), mas sim, pelo menos isso não é tão ruim quantogrep
(que não possui o POSIX-e
/-E
por exemplo) outr
(que não possuitr a-f A-F
).