Esta es más o menos una pregunta de seguimiento a las siguientes dos:
- Error de sintaxis al eliminar líneas duplicadas a través del archivo awk '! X [$ 0] ++'
- Alternativa awk / nawk en SunOs y Linux
Veo que en Solaris 10 (SunOS 5.10), obtengo los siguientes 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
$
En Solaris 10, /usr/bin/awkno acepta la sintaxis Awk estándar POSIX como '!x[$0]++', pero /usr/xpg4/bin/awksí. Lo suficientemente bueno hasta ahora.
Sin embargo, en Solaris 11, solo hay /usr/bin/awkincluso con getconf PATH. Aunque también existe nawky oawkexiste /usr/bin, estos evidentemente no son señalados por enlaces simbólicos desde cualquier lugar.
Sabiendo que Solaris tiene certificación POSIX, esto me sorprendió.
¿Cómo puedo obtener un Awk compatible con POSIX de manera estándar en Solaris 11 usando un código portátil que también funcionará en otros sistemas compatibles con POSIX? (¿O es la única opción para verificar la existencia de nawko oawkusar uno de estos si está presente?)
Para el caso, ¿qué son nawk y oawk?

/usr/xpg4/bin/awkno está en Solaris 11?nawkes "nuevoawk", un AT&T mejoradoawk.Respuestas:
En una instalación de Solaris 11 completa o de escritorio, hay tres
awkimplementaciones disponibles, más algunas variantes:Todos son "compatibles con los estándares", aunque cumplen con diferentes estándares.
/usr/bin/awkestá cumpliendo con laawkimplementación heredada de UNIX lanzada en 1977. Se mantiene primero en la RUTA predeterminada del sistema para no romper los scripts existentes ya que lasawkversiones posteriores rompen la compatibilidad.oawkes sinónimo deawk/usr/bin/nawkes la "nueva" versión deawk, enviada por primera vez en SVR3.1 en 1986. ElAwkestándar POSIX se basó en esta implementación./usr/xpg4/bin/awkes casi idéntico al anterior, pero el que se verifica formalmente con las pruebas de validación de conformidad POSIX./usr/gnu/bin/awk, también/usr/bin/gawkes la variante GNU deawk. Su objetivo es cumplir con la mayoría o la totalidad del estándar POSIX cuando la variable de entornoPOSIXLY_CORRECTse establece en el entorno o cuando se llama con la-W posixopción, pero de lo contrario agrega numerosas extensiones propias específicas.igawkypgawkson extensiones en sí mismasgawk, la primera admite incluir archivos y la segunda admite la creación de perfiles.Consulte también el capítulo de historia de GNU
awkpara obtener mucha información útil.Sólo los
core-ospaquetes están garantizados para estar presentes en una instalación normal de Solaris 11, por lo tanto sólooawk/awkynawkestán ahí. En particular, cuando crea una nueva zona no global , contiene de manera predeterminada elsolaris-small-serverpaquete de grupo, de modo quexpg4ni elgnuawkbinario ni el otro están disponibles. Esto es por diseño. Elsolaris-small-servergrupo es un punto de inicio mínimo al que agrega los paquetes necesarios para que sus aplicaciones funcionen correctamente. Esto es más seguro y eficiente que la forma anterior (Solaris 10) donde todo lo instalado en la zona global también se instaló en la no global, por lo que tuvo que eliminar los paquetes no utilizados cuando quería minimizar la zona.Para conseguir que POSIX
awkadmita una instalación portátil en una instalación de "servidor pequeño" de este tipo, debe instalar elxcu4paquete y configurar su RUTA en el que cumple con POSIX:Si por alguna razón no desea instalar ese paquete, una solución alternativa es usar un "personalizado" que
PATHcontenganawkcomoawk, por ejemplo:Alternativamente, puede instalarlo
GNU awky configurarloPATHpara obtenerlo primero:Tenga en cuenta que esto no es específico de Solaris 11. Ya existía una agrupación de paquetes similar en Solaris 10 y anteriores, y las utilidades compatibles con POSIX solo se instalaron en los metaclusters "Usuario final", "Desarrollador" y "Instalación completa". Tener un sistema o una zona instalados con el metacluster "Core" o "Networking support" habría llevado al mismo
xpg4problema que falta.Tenga en cuenta también que la falta de
/usr/xpg4/bin/awkun sistema Solaris 11 no es una falla de cumplimiento POSIX. Solo se utilizan instalaciones completas de Solaris en la gran mayoría de las pruebas realizadas por Oracle e ISV, incluido el programa de certificación Open Group . Las instalaciones reducidas son compatibles pero no están calificadas .Si distribuye scripts de shell (o aplicaciones que incorporan scripts de shell / invocando comandos de shell) para Solaris 11, solo necesita definirlo
/system/xopen/xcu4como una dependencia en su paquete IPS y el instalador hará automáticamente lo que se requiere para que el script funcione correctamente:Ver https://docs.oracle.com/cd/E53394_01/html/E54820/dependtypes.html
fuente
awksiempre está presente en un sistema Solaris o en una zona no global, por lo que el problema no se trata de disponibilidad sino que se limita al nombre del comando (nawkvsawk). docs.oracle.com/cd/E53394_01/html/E54763/nawk-1.htmlnawkes casi POSIX (no es compatible,CONVFMTpor ejemplo), pero sí, al menos eso no es tan malo comogrep(que no tiene POSIX-e/-Epor ejemplo) otr(que no tienetr a-f A-F).