martes, 11 de enero de 2011

Leer un fichero línea por línea en Bash.

Para leer un fichero línea por línea en Bash se tiende a utilizar el bucle “for” y el resultado que se obtiene es la evaluación de cada palabra y no de cada una de las líneas del fichero.
   1:  #!/bin/bash
   2:   
   3:  for i in $(cat file.txt)
   4:  do
   5:     echo $i
   6:  done

La solución consiste en utilizar un bucle “while” de la siguiente manera:

   1:  #!/bin/bash
   2:   
   3:  while read linea
   4:  do
   5:     echo -e $linea
   6:  done < fichero


Es mucho más simple que usar el bucle “for”.

También es posible utilizar el bucle “for” para leer un fichero cambiando el separador de campo interno (IFS).

   1:  #!/bin/bash
   2:   
   3:  #Almacenamos el valor original de la variable IFS
   4:  oldIFS=$IFS
   5:   
   6:  #Cambiamos el valor del IFS
   7:  IFS=$'\n'
   8:   
   9:  for line in $(cat file.txt)
  10:  do
  11:      echo $line
  12:  done
  13:   
  14:  #Restauramos el IFS
  15:  IFS=$oldIFS


El resultado de esta ejecución es la salida en pantalla de cada una de las líneas del fichero.

No hay comentarios:

Publicar un comentario