Lectura de ficheros desde la Shell de linux (Bash) 2


Objetivo:
Componer un comando a partir del contenido de un fichero depositado en un determinado directorio. Habrá un fichero en el directorio por comando a componer. Todo ello con un scritp de bash.

Para ello tendremos que:

  • Leer los ficheros que hay en un directorio.
  • Por cada uno de los ficheros: leerlo, parsear el contenido del fichero (los parámetros están separados por #) y almacenar el contenido en una variable para después usarlo.
  • Cada fichero tiene una única línea y cada línea 3 parámetros.

Para leer los ficheros que hay en un directorio y realizar una acción por cada fichero usaremos un bucle for:

for fichero in $(ls $ruta_pendientes)
do

done

Para leer la primera línea de un fichero usaremos read. Si tuvieramos que leer varias líneas deberíamos incluirlo en un bucle while.

read linea < $ruta_pendientes/$fichero 

Para parserar esta línea en variables sería usando tr:

pal=(`echo $linea | tr ‘#’ ‘ ‘`)

Aquí recordar que | encamina la salida de un comando a otro, que ‘`’ ejecuta el comando, que tr lo que hace es sustituir unas cadenas por otras así que sustituye los # por espacios y que la forma de extraer los valores de la variable (que mas que una variable es un vector) sería con ${pal[0]} siendo 0 el primer valor almacenado.

 !!! Nuevos requisitos ¡¡¡ 
Incluir una traza de los errores. Habría que hacerlo redireccionando la salida de errores:

2>$traza

Enviar por correo la traza.

mailx -s “$asunto_correo” $lista_correo < $traza

Aquí recordar que las comillas dobles permiten la expansión de las variables, y que el argumento que le pasamos a -s debe ir entrecomillado ya que si no sólo toma la primera palabra como asunto y el resto como direcciones de correo.

Compartir
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

2 ideas sobre “Lectura de ficheros desde la Shell de linux (Bash)

  • Alberto

    Buenas tardes,

    Soy bastante nuevo en esto y agradecería cualquier tipo de ayuda.

    Mi problema es que tengo, por un lado, un directorio con una serie de ficheros, y por otro, un fichero (al cual me referiré a él a partir de ahora como Control para evitar líos) con una serie de registros que coinciden con la segunda línea de varios de esos ficheros.

    Necesitaría algún script que entrase en todos los ficheros, leyendo la segunda línea de cada fichero y la compare con Control, copiandome los ficheros del directorio aquellos que coincidan su segunda línea con algunos de los registros de Control en otro directorio.

    Muchas gracias de antemano.

    Un saludo

    • Guillermo Conde Autor

      Hola Alberto.

      Así de pronto no te sabría decir como hacerlo de un modo fácil e inmediato. A priori lo que se me ocurre es extraer la segunda línea a una variable y compararla con el control usando el comando diff.

      Pero entiendo que el tema será un poco mas sofisticado que eso.