UNIX – Ejemplos y trucos para el lenguaje de programación AWK.-

Ejemplo para sumar el tamaño total ocupado por los ficheros de un directorio:

Podemos hacer mas flexible la suma de columnas en AWK∞ añadiendo una condición, en este ejemplo limitamos la suma del tamaño de los ficheros a aquellos en los que el usuario “apache” sea el propietario del mismo:

Tip! Obtener el tamaño total ocupado por un determinado tipo de ficheros: con find filtramos por el tipo de extensión, con esta obtenemos el tamaño total de cada fichero y finalmente hacemos la suma con AWK:

También podemos utilizar AWK para sacar la media de los valores que sumamos en una columna dividiendo el total entre NR (Number of Records). Ejemplo para obtener el RSS medio que consumen los procesos nginx:

Ejemplo para imprimir con AWK un determinado rango de columnas, en este caso se procesa un log de Apache para imprimir únicamente el contenido entre la primera y quinta columna:

Utilizando NF (Number of Fields, número de campos en la línea actual) podemos imprimir el contenido desde una determinada columna hasta el final, en este ejemplo analizamos el log del servicio CRON para imprimir el último campo (que se corresponde al comando ejecutado), posteriormente lo filtramos con sort + uniq para listar de mayor a menor la frecuencia de los crontabs que mas se ejecutan:

Con este sencillo hack para AWK∞ podemos imprimir el contenido entre dos determinados patrones; Por ejemplo, vamos a analizar un caso donde nos interesa extraer el contenido que se encuentra entre los caracteres [ y ]:

Establecemos la variable FS (Field Separator, o separador de campos, similar al IFS de BASH∞) al valor [. Es decir, FS contiene el primer patrón.

Al utilizar [ como FS tendremos el contenido separado en X partes: la variable $1 contendrá lo que se queda a la “izquierda” del patrón, $2 contiene lo que queda a la derecha, y así sucesivamente. Con la asignación $0=$2 la línea completa pasa a tener el valor que está a la “derecha” del patrón que hemos utilizado como FS.

Utilizamos RS=[ (Input Record Separator) para marcar el final del contenido que buscamos, así cuando AWK∞ se encuentra con el patrón ] lo toma como el final del contenido, es decir, RS contiene el segundo patrón.

En este otro ejemplo, vamos a extraer las cadenas que se encuentran entre las etiquetas HTML

de la página de un usuario del servicio Twitter, de modo que obtendremos un listado de enlaces que este ha publicado:

Publicado en Unix - Linux | Deja un comentario

BASH – Script de ejemplo comando EVAL.-

El comando “eval” indica al shell que vuelva a analizar la línea. Esto puede ser útil si está asignando un valor que tiene el mismo nombre que una variable. En el ejemplo siguiente tratamos de asignar var2 con var1 y luego mostrar nuestra salida.

Al ejecutar este script, obtendriamos el siguiente resultado :

En el ejemplo anterior, observe que la salida del primer comando de eco emitió “$ var1”, sin embargo, cuando utilizamos el comando “eval” pudimos mostrar nuestro valor correctamente.

Publicado en Unix - Linux | Deja un comentario

UNIX – Ejecutar scripts en maquina remota vía SSH.-

Hay dos formas de hacerlo, una utilizando un script localizado en la maquina local y otra en el que lo invocamos en la maquina remota.

Con un script en maquina local:

Con un script en la maquina remota, localizado en el directorio home del usuario con el que nos conectamos:

Publicado en Unix - Linux | Deja un comentario

BASH – Script para obtener el directorio de ejecución del script BASH.-

Esto es muy útil, pues cuando haces un programa y lo ejecutas a mano controlas estos “parámetros” como son quien lo ejecuta y desde donde, pero cuando ese mismo script lo automatizas por ejemplo en un cron estas variables (quien lo ejecuta y desde donde suele cambiar) y por lo tanto es muy probable que el resultado esperado de tu programa no sea el que tú deseabas sino otro por ese motivo. Se ejecuta de manera diferente a lo que tú esperas.

Publicado en Unix - Linux | 1 comentario

BASH – Script Lectura con timeout.-

Para quedar a la espera de que el usuario introduzca el dato que se le solicita durante un tiempo limitado, el comando read dispone del modificador “-t”, que permite especificar el número máximo de segundos antes de que el script continue su ejecución. Si se alcanza el tiempo límite, el valor de las variables a leer queda en blanco, y el comando read devuelve un código de status distinto de cero:

Publicado en Unix - Linux | Deja un comentario

BASH – Eliminar espacios en blanco sobrantes de una variable. (Espacios adelante y atras)

Eliminar los espacios por delante y por detrás, pero no por dentro, directamente dentro del script Bash, el código resultante es un poco confuso:

Al ejecutar este script el resultado que nos mostrara sera el siguiente :

Publicado en Unix - Linux | Deja un comentario

BASH – Cómo comprobar si un array de bash contiene un elemento.-

Lamentablemente no existe ninguna manera sencilla de hacerlo, pero sí que puedes utilizar la siguiente función:

Y así es como podrías utilizarlo:

Publicado en Unix - Linux | Deja un comentario

BASH – Manejo de cadenas de texto.

A veces se encuentran ciertas limitaciones a la hora de escribir scripts de shell en el manejo de cadenas y es que, muchas veces, nos olvidamos de que bash tiene un montón de operaciones sobre strings. Por ejemplo:

Otra cuestión donde no es difícil cometer errores es en las comparaciones; al no ser bash un lenguaje tipado, ciertas construcciones pueden dar lugar a errores que pasan desapercibidos y llegan a ser difíciles de detectar. Así que recordemos:

El operador de comparación es =, no -eq.
== es sinónimo de =
El operador “distinto de” es !=
Ejemplos:

Pero, con dobles corchetes, el funcionamiento es distinto (pattern matching):

Si las expresiones son compuestas, se pueden usar los operadores -a (y lógico) y -o (o lógico). Y, sólo en el caso de usar dobles corchetes, sus “casi” equivalentes && y || o

Publicado en Unix - Linux | Deja un comentario

BASH – Usar ficheros de plantillas (templates) con Bash Script.-

Si tenemos ficheros de plantillas en los que hemos definido algunas variables y queremos obtener el fichero tras aplicar la sustitución de las variables, podriamos emplear el comando “eval” de la siguiente manera.

Por ejemplo, podriamos tener un fichero de plantilla llamado “saludo.txt”

Hola $NOMBRE, estamos muy agradecidos de que lea el Blog $BLOG

Ahora desde un script de shell podriamos leer este fichero y aplicar una sutitucion de variables de una manera similar a la siguiente:

Si no lo conociais el comando “eval” nos puede servir por ejemplo para evaluar una expresión de cadena y proceder a su ejecución en la shell, por ejemplo:

eval “ls -l” nos saca un listado de los archivos.

Pero como eval parte de una expresion construida a base de strings, ya os podeis imaginar que puede hacer bastantes cosas interesantes en la programación de bash.

Publicado en Unix - Linux | Deja un comentario

BASH – Script ejemplo array asociativo.-

Para poder trabajar con arrays asociativos, se debe tener instalado version 4 o superior de BASH :

Al ejecutra este script, nos mostyrara el siguiente resultado

Publicado en Unix - Linux | Deja un comentario

BASH – Cómo procesar múltiples argumentos de entrada en scripts para Bash

Podemos hacer bucles que recorran los argumentos de entrada de nuestro programa, por ejemplo:

La parte del contador no es estrictamente necesaria, pero da un toque de distinción. Desde aquí hemos recorrido todos los argumentos del programa, ya podremos procesarlos como queramos, o si son archivos de entrada, abrirlos, etc.

Pero también podemos hacerlo de otra forma, que nos puede resultar más cómoda en otras ocasiones, con un bucle while:

Publicado en Unix - Linux | Deja un comentario

BASH – Script para copiar y verificar la copia de archivos con MD5 en Solaris.-

Publicado en Unix - Linux | Deja un comentario

BASH – Script para matar multiples procesos en una sola linea.-

Publicado en Unix - Linux | Deja un comentario

BASH – Listar archivos con ruta completa en linea de comandos.-

Publicado en Unix - Linux | Deja un comentario

BASH – Script para renombrar archivos (sencillo).-

Publicado en Unix - Linux | Deja un comentario

BASH – Script ejemplo ciclo UNTIL

Publicado en Unix - Linux | Deja un comentario

Ver el Porcentaje de uso de memoria SWAP en un servidor con Solaris.-

Publicado en Unix - Linux | Deja un comentario

BASH – Script para indicar 2 formas de que falta ingresar algún argumento.-

Publicado en Unix - Linux | Deja un comentario

BASH – Script para contemplar que respuesta pueda ser de varias maneras.-

Publicado en Unix - Linux | Deja un comentario

BASH – Script dar nombre de variable a cada campo.-

Publicado en Unix - Linux | Deja un comentario