Herramientas de terminal
28-09-2022

En las últimas semanas me he dedicado a completar los cursos sobre terminal de CodelyTV y me gustaría compartir con vosotros algunas de las herramientas y recursos que me han parecido interesantes.
ZSH
En primer lugar el archiconocido Zsh.
Es un intérprete de comandos basado en el estándar sh así como Bash. La diferencia radica en la posibilidad de instalar frameworks, que nos dan la posibilidad de añadir plugins y temas personalizados, que aumentan la capacidad del intérprete.
- https://terminaldelinux.com/terminal/introduccion/instalacion-zsh/
- https://github.com/ohmyzsh/ohmyzsh
- https://github.com/ohmyzsh/ohmyzsh/wiki/Cheatsheet
- https://github.com/zimfw/zimfw
TLDR
TLDR es una alternativa al clásico MAN, que nos aporta información acerca de una utilidad de consola.
La característica principal de TLDR, es que muestra la información de forma mucho más amigable, e incluye ejemplos muy sencillos y claros de como utilizar el comando.

AWK
AWK es un lenguaje de programación utilizado principalmente para el procesamiento de archivos de texto. Aunque, como veremos más adelante tiene otras aplicaciones.
Por ejemplo, todos hemos abierto en nuestro editor favorito, un CSV de miles de líneas, con un formato que no nos funciona para la tarea que estamos abordando. Tiramos de multicursor o cualquier otra triquiñuela y, nuestro ordenador lucha por salir adelante entre congelación y congelación.
Cuando fracasas en el intento, intentas hacer un script para procesar el CSV y dejarlo en el formato correcto. Probablemente funcione, sin embargo el riesgo de que el script no esté lo suficientemente optimizado y el tiempo de desarrollo requerido, hace que esta sea una vía cuestionable.
Para estos casos tenemos AWK. Que es capaz de formatear de forma eficiente un archivo de varios cientos de miles de líneas.
Pasemos a un ejemplo práctico.
Aquí tenemos un CSV con 5.429.253 líneas. Os podéis imaginar, las fatigas que se pueden pasar para invertir el orden de las columnas usando un editor o un script.

Bien, pues veamos cuanto tiempo tarda en hacerlo AWK.


Cuatro segundos y medio para dar formato a nuestro archivo de más de 5 millones de registros.
AWK es la clase de herramienta que no vamos a tener que utilizar mucho, pero agradeceremos tenerla cuando la necesitemos. No se trata de ser un maestro, ya que AWK tiene mucha profundidad, se trata de contar con un buen recurso y encontrar el script adecuado.
FZF
FZF se puede definir como un filtro interactivo de línea de comandos.
Si ejecutamos simplemente fzf en nuestra consola, empezará a mostrar todos los archivos del sistema. Si escribimos algo, por ejemplo node, nos filtrará los archivos y carpetas que tengan algo que ver.

Y si pulsamos enter en alguno de estos archivos, observamos que nos devuelve la cadena que hemos seleccionado.

Entonces, ¿qué puedo hacer yo con esto?
FZF por si solo no tiene mucha utilidad. Sin embargo, combinándolo con otras herramientas, su potencia crece exponencialmente como veremos a continuación.
- https://betterprogramming.pub/boost-your-command-line-productivity-with-fuzzy-finder-985aa162ba5d
- https://github.com/junegunn/fzf
FZF + AWK
Aquí tenemos algunos scripts de ejemplo.
Previsualizador de archivos con FZF y CAT
Usando BAT se logran unos resultados más agradables a la vista.
ls -p | grep -v / | fzf --preview 'cat {}'

Función para movernos de carpeta de forma interactiva
_move() { dirtomove=$(ls -d */ | fzf | awk '{print $NF}') cd "$dirtomove" }

Matar proceso de forma interactiva
ps aux | fzf | awk '{print $2}' | xargs sudo kill -9

Entrar a contenedor de Docker de forma interactiva
#!/usr/bin/env zsh if docker ps >/dev/null 2>&1; then container=$(docker ps | awk '{if (NR!=1) print $1 ": " $(NF)}' | fzf --height 40%) if [[ -n $container ]]; then container_id=$(echo $container | awk -F ': ' '{print $1}') docker exec -it $container_id /bin/bash || /bin/sh else echo "You haven't selected any container! ༼つ◕_◕༽つ" fi else echo "Docker daemon is not running! (ಠ_ಠ)" fi

¿Y ahora qué?
La verdad, es que esto no es ni la punta del iceberg de todo lo que pueden ofrecer estos recursos. Espero que al menos os haya picado la curiosidad y os animéis a explorarlas.
¡Un saludo!