BASH – Script lectura de archivos de gran tamaño.-

A menudo necesitamos leer archivos en medio de nuestros scripts Bash, para procesar su contenido. Muchas veces nos basta con usar las comillas francesas y el comando cat dentro de un bucle, algo similar a:

for VBLE in `cat ARCHIVO`
do
# Hacer algo con $VBLE
done

El problema aparece cuando el archivo es muy grande, y el contenido supera el buffer que Bash destina a la línea de argumentos de los comandos (espacio reservado para el argv de la función Main en C, por simplificar mucho). Otras veces tropezamos con esta limitación al usar comodines en los comandos como ls, chmod, rm, etc, dentro de directorios que tienen muchos archivos, a lo que el intérprete de comandos nos responde con un mensaje que nos viene a decir que la línea de argumentos es demasiado larga. En estos casos podemos salir con el uso del comando find y el argumento -exec, pero cuando trabajamos con el contenido de ficheros, esta solución no nos sirve.
Por suerte el intérprete Bash contempla esta posibilidad y nos proporciona de comandos específicos para poder procesar archivos de forma secuencial, como siempre hemos hecho. El esquema es el siguiente:

#!/bin/bash
# Abrir el archivo para lectura
# El 8 representa el numero de descriptor asociado al fichero
exec 8< motor.txt

# Bucle para leer todo el contenido
# Cada iteracion lee una linea del archivo y la deja en VBLE
while read -u 8 VBLE
do
# Hacer algo con $VBLE
echo $VBLE
done

# Cerrar el fichero
exec 8<&-
Esta entrada fue publicada en Unix - Linux. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.