Supongamos que tenemos un fichero llamado fichero con el siguiente contenido:
uno dos tres
cuatro cinco
seis
cuatro cinco
seis
Y un script analizar.sh con el siguiente código:
#!/bin/bash
LINEAS=$(cat fichero)
for LINEA in $LINEAS
do
echo $LINEA
done
LINEAS=$(cat fichero)
for LINEA in $LINEAS
do
echo $LINEA
done
Si lo ejecutamos, veremos que la salida no es la esperada:
$ ./analizar.sh
uno
dos
tres
cuatro
cinco
seis
dos
tres
cuatro
cinco
seis
Esto ocurre porque un bucle en bash usa para separar los campos espacios en blanco, saltos de linea, etc. Tendremos que decir a bash que el separador sea exclusivamente el salto de linea:
#!/bin/bash
IFS="
"
LINEAS=$(cat fichero)
for LINEA in $LINEAS
do
echo $LINEA
done
IFS="
"
LINEAS=$(cat fichero)
for LINEA in $LINEAS
do
echo $LINEA
done
La variable IFS (Internal Field Separator) es una variable interna de bash que especificará el caracter separador. Con este simple cambio, podremos procesar cada linea de un fichero según nuestras necesidades.
No hay comentarios:
Publicar un comentario