![]() |
|||
![]() |
Conozco y uso extensamente AWK desde hace unos 25 años (al 2019). |
Descripción
AWK es un lenguaje de programación. Su intérprete se invoca mediante el comando awk(1)
. Esto es una fuente de confusión muy usual y común pues muchos consideran AWK y awk
como equivalentes, pero debe uno ser claro cuando se refiere al lenguaje de programación y cuando al intérprete.
A veces, awk
es llamado un «filtro» por las acciones que éste puede realizar con una entrada de datos. Sin embargo, el intérprete, mediante el scripting que puede hacerse con AWK logra mucho más que sólo filtrar. Un filtro, para tenerlo en contexto, es cut(1)
o algún comando similar. Información adicional de la historía de este lenguaje, en estos posts: 1, 2, 3.
El entorno macOS
macOS Catalina v10.15 |
![]() |
macOS Catalina incluye la clásica implementación de AWK, el cual está bien pero, para la época actual, presenta ciertas limitaciones. Para algunas ocasiones una implementación más moderna puede ser preferible.
$ awk --version
awk version 20070501
Instalación o actualización
La forma fácil de instalar AWK es mediante un administrador de paquetes como es Homebrew. Un posible problema pueden ser los permisos. Por ejemplo:
$ brew install gawk
...
Error: The following directories are not writable by your user:
/usr/local/share/locale
You should change the ownership of these directories to your user.
sudo chown -R $(whoami) /usr/local/share/locale
And make sure that your user has write permission.
chmod u+w /usr/local/share/locale
Intentar hacerlo con sudo
no funcionará, pues el Homebrew con «es muy cobarde»:
$ sudo brew install gawk
Error: Running Homebrew as root is extremely dangerous and no longer supported. As Homebrew does not drop privileges on installation you would be giving all build scripts full access to your system.
Aunque esto puede ser resuelto permitiendo simplemente poder escribir en los directorios señalados, puede haber problemas después si el macOS llega a hacer una revisión actualización de éstos. Así,
$ sudo chmod -R g+w /usr/local/share/locale
permite poder ejecutar:
$ brew install gawk
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/cask).
No changes to formulae.
==> Installing dependencies for gawk: gettext, gmp, mpfr and readline
==> Installing gawk dependency: gettext
==> Downloading https://homebrew.bintray.com/bottles/gettext-0.20.1.catalina.bot
Already downloaded: /Users/admin/Library/Caches/Homebrew/downloads/5f0623a7810dc5225d94f823a8ff0d216a063934ba6579d4a5d0f5996b289ac9--gettext-0.20.1.catalina.bottle.tar.gz
==> Pouring gettext-0.20.1.catalina.bottle.tar.gz
==> Caveats
gettext is keg-only, which means it was not symlinked into /usr/local,
because macOS provides the BSD gettext library & some software gets confused if both are in the library path.
If you need to have gettext first in your PATH run:
echo 'export PATH="/usr/local/opt/gettext/bin:$PATH"' >> ~/.bash_profile
For compilers to find gettext you may need to set:
export LDFLAGS="-L/usr/local/opt/gettext/lib"
export CPPFLAGS="-I/usr/local/opt/gettext/include"
==> Summary
🍺 /usr/local/Cellar/gettext/0.20.1: 1,893 files, 18.4MB
==> Installing gawk dependency: gmp
==> Downloading https://homebrew.bintray.com/bottles/gmp-6.1.2_2.catalina.bottle
Already downloaded: /Users/admin/Library/Caches/Homebrew/downloads/5aa09afe716bf4318e4482ea17edb1822a33ad814017ec7846346c8d59688ed2--gmp-6.1.2_2.catalina.bottle.1.tar.gz
==> Pouring gmp-6.1.2_2.catalina.bottle.1.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink include/gmp.h
Target /usr/local/include/gmp.h
already exists. You may want to remove it:
rm '/usr/local/include/gmp.h'
To force the link and overwrite all conflicting files:
brew link --overwrite gmp
To list all files that would be deleted:
brew link --overwrite --dry-run gmp
Possible conflicting files are:
/usr/local/include/gmp.h
/usr/local/share/info/gmp.info
/usr/local/share/info/gmp.info-1
/usr/local/share/info/gmp.info-2
/usr/local/lib/libgmp.10.dylib
/usr/local/lib/libgmp.a
/usr/local/lib/libgmp.dylib -> /usr/local/lib/libgmp.10.dylib
==> Summary
🍺 /usr/local/Cellar/gmp/6.1.2_2: 18 files, 3MB
==> Installing gawk dependency: mpfr
==> Downloading https://homebrew.bintray.com/bottles/mpfr-4.0.2.catalina.bottle.
Already downloaded: /Users/admin/Library/Caches/Homebrew/downloads/c2450a9a667c06cfb8a429ac0eb4357094224fede788da6755e8dd58a0ef92d5--mpfr-4.0.2.catalina.bottle.tar.gz
==> Pouring mpfr-4.0.2.catalina.bottle.tar.gz
🍺 /usr/local/Cellar/mpfr/4.0.2: 28 files, 4.7MB
==> Installing gawk dependency: readline
==> Downloading https://homebrew.bintray.com/bottles/readline-8.0.1.catalina.bot
Already downloaded: /Users/admin/Library/Caches/Homebrew/downloads/7ba173dce0bacf0af49b0e00117a945c0329420f77a21d0986a0e69a4f7f2780--readline-8.0.1.catalina.bottle.tar.gz
==> Pouring readline-8.0.1.catalina.bottle.tar.gz
==> Caveats
readline is keg-only, which means it was not symlinked into /usr/local,
because macOS provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.
For compilers to find readline you may need to set:
export LDFLAGS="-L/usr/local/opt/readline/lib"
export CPPFLAGS="-I/usr/local/opt/readline/include"
For pkg-config to find readline you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig"
==> Summary
🍺 /usr/local/Cellar/readline/8.0.1: 48 files, 1.5MB
==> Installing gawk
==> Downloading https://homebrew.bintray.com/bottles/gawk-5.0.1.catalina.bottle.
==> Downloading from https://akamai.bintray.com/3b/3bb22749e869048a14e444e738813
######################################################################## 100.0%
==> Pouring gawk-5.0.1.catalina.bottle.1.tar.gz
🍺 /usr/local/Cellar/gawk/5.0.1: 90 files, 4.7MB
==> Caveats
==> gettext
gettext is keg-only, which means it was not symlinked into /usr/local,
because macOS provides the BSD gettext library & some software gets confused if both are in the library path.
If you need to have gettext first in your PATH run:
echo 'export PATH="/usr/local/opt/gettext/bin:$PATH"' >> ~/.bash_profile
For compilers to find gettext you may need to set:
export LDFLAGS="-L/usr/local/opt/gettext/lib"
export CPPFLAGS="-I/usr/local/opt/gettext/include"
==> readline
readline is keg-only, which means it was not symlinked into /usr/local,
because macOS provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.
For compilers to find readline you may need to set:
export LDFLAGS="-L/usr/local/opt/readline/lib"
export CPPFLAGS="-I/usr/local/opt/readline/include"
For pkg-config to find readline you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig"
Como puede verse arriba, señalado en rojo, hay un problema con la instalación. Este se ha sobrellevado con los siguiente comandos:
$ mv /usr/local/include/gmp.h /usr/local/include/gmp.h-20191117
$ mv /usr/local/share/info/gmp.info /usr/local/share/info/gmp.info-20191117
$ mv /usr/local/share/info/gmp.info-1 /usr/local/share/info/gmp.info-1-20191117
$ mv /usr/local/share/info/gmp.info-2 /usr/local/share/info/gmp.info-2-20191117
$ mv /usr/local/lib/libgmp.10.dylib /usr/local/lib/libgmp.10.dylib-20191117
$ mv /usr/local/lib/libgmp.a /usr/local/lib/libgmp.a-20191117
$ mv /usr/local/lib/libgmp.dylib /usr/local/lib/libgmp.dylib-20191117
para
$ brew unlink gawk
Unlinking /usr/local/Cellar/gawk/5.0.1... 41 symlinks removed
$ brew reinstall awk
==> Reinstalling awk
==> Downloading https://homebrew.bintray.com/bottles/awk-20180827.catalina.bottl
######################################################################## 100.0%
==> Pouring awk-20180827.catalina.bottle.tar.gz
🍺 /usr/local/Cellar/awk/20180827: 7 files, 178.0KB
Tras lo que se ha procedido con:
$ brew reinstall gawk
==> Reinstalling gawk
==> Downloading https://homebrew.bintray.com/bottles/gawk-5.0.1.catalina.bottle.
Already downloaded: /Users/admin/Library/Caches/Homebrew/downloads/c3c9257aaa8460f64be8fcdda6b902852f7c65115961d129a42b04ee25bc7f0d--gawk-5.0.1.catalina.bottle.1.tar.gz
==> Pouring gawk-5.0.1.catalina.bottle.1.tar.gz
🍺 /usr/local/Cellar/gawk/5.0.1: 90 files, 4.7MB
y así:
$ gawk --version
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.1.2)
Copyright (C) 1989, 1991-2019 Free Software Foundation.
...
Desinstalación
Para desinstalar gawk
, se procede con:
$ brew uninstall mpfr gmp gettext gawk readline
Ejemplos
Algunos ejemplos en el uso de AWK.
Ejemplos de uso en posts de este blog:
- Visualizando la estructura arbórea de directorios.
- El complemento de una lista de caracteres (1), (2).
- Leyendo manifiestos de distribución de paquetes de macOS.
- Arreglando tiempos de archivos.
Referencias
|
© Todos los derechos reservados. Dr. Eduardo René Rodríguez Ávila |
Creación: 2019.11.17 Última actualización: 2019.11.17 |
|||
El contenido de este sitio puede ser copiado y reproducido libremente mientras no sea alterado y se cite su origen. Marcas y productos registrados son citados por referencia y sin fines de lucro o dolo. Todas las opiniones son a título personal del o los autores de éstas y, salvo sea expresado de otro modo, deben considerarse como registro y expresión de la experiencia de uso de aquello que es tratado. Para conocer más sobre la posición de privacidad y responsabilidad de lo que se presenta en este sitio web y como ha sido obtenido, consulte la declaración al respecto. |