awk, mawk, nawk, gawk ... ¿QUÉ?

38

Acabo de empezar a aprender awk y estoy un poco confundido acerca de todas esas versiones. ¿Hay alguna "versión" que se encuentre en todos los sistemas tipo Unix? Como, ya sabes, ¿simple vi? ¿El awk estándar admite la opción -F?

Der Hochstapler
fuente

Respuestas:

37

awk : el más común y se encontrará en la mayoría de los sistemas tipo Unix, la versión más antigua e inferior a los más nuevos.

mawk : implementación rápida de AWK cuyo código base se basa en un intérprete de código de bytes.

nawk : mientras se desarrollaba el lenguaje AWK, los autores lanzaron una nueva versión (de ahí el n - n ew awk) para evitar confusiones. Piense en ello como el Python 3.0 de AWK.

gawk : abreviado de GNU awk. La única versión en la que los desarrolladores intentaron agregar soporte para i18n. Permitía a los usuarios escribir sus propias bibliotecas compartidas en C para ampliarlas con sus propios "complementos". Esta versión es la implementación estándar para Linux, el AWK original fue escrito para Unix v7.

Hay otras versiones como jawk (implementación de java), bwk (implementación de Brian W. Kernighan), etc.

John T
fuente
3
El awk original no está presente en ningún sistema similar a Unix que tenga disponible. A menudo, /usr/bin/awkejecutará nawk, o gawk, o BusyBox awk (similar en comportamiento a gawk).
dubiousjim
10
A finales de 2012, los sistemas Ubuntu / Debian instalan mawk por defecto. La línea de comando file /etc/alternatives/awkregresasymbolic link to /usr/bin/mawk
Mike Sherrill 'Cat Recall'
¿MAWK tiene todas las funcionalidades de GAWK, como las verdaderas matrices multidimensionales?
WYSIWYG
2
@JordonBedwell Sí. Hay: las repeticiones de expresiones regulares no son posibles en mawk. Tampoco admite matrices multidimensionales.
WYSIWYG
1
@dubiousjim Ubuntu tiene original-awk en el repositorio del universo.
jarno
6

Solo puedes usar awk. Está definido por POSIX y, por lo tanto, debe existir en todos los sistemas conformes con POSIX.

El -Fparámetro también es obligatorio por eso .

Joey
fuente
1
... pero tenga cuidado de verificar con el estándar para saber qué puede usar para asegurar la compatibilidad con otra versión. No, por ejemplo, use gensub(), pruebe con awk-> gawk, y piense que está listo para ir ...
dmckee
1
@dmckee, puede usar gawk --posixpara hacer que gawk funcione de acuerdo con el estándar POSIX. También verifica que su script siga el estándar. Puede usarlo awk --posix '' 2>/dev/nullen Ubuntu sin importar si gawk, mawk u original-awk se usan como awk, pero la opción posix solo es reconocida por gawk. --posix tiene que ser la última opción para original-awk. Se puede usar awk -W posix ''con gawk y mawk.
jarno
1
@dmckee, oh mawk --posix ''falla, si usa mawk 1.3.3, pero tiene éxito con el mensaje de error, si usa mawk 1.3.4
jarno
1

awkestará en casi todos los sistemas basados ​​en * NIX, pero los detalles exactos de lo que admite cambiarán ligeramente, ya que es completamente posible, simplemente se vincularán a una versión diferente similar a la que a /bin/shmenudo se vincula a un shell específico, a menudo basho uno de sus derivados (Para que conste, también conozco muchas máquinas a las que también viestá vinculado vim).

Matthew Scharley
fuente
No siempre tiene que estar enlazado a un enlace simbólico; A veces está vinculado.
dubiousjim