abr 13 2010

for en bash. Configurar salto de linea en un fichero

Category: LinuxDavid González @ 22:21

Hoy vamos a dar un pequeño truco a la hora de usar un bucle for en un script en bash.

La estructura de un for en bash sería la siguiente:

#!/bin/sh
for i in 1 2 3
do
  echo "$i"
done

Esto nos imprimirá 1 2 3. Vemos que por defecto el bucle for, toma el carácter “espacio en blanco” como referencia. De esta forma lee el 1, luego el 2 y luego el 3.

Otro ejemplo. Tenemos este archivo de texto ‘tureceta.txt’:

dgonzalez@David:~$ cat /home/tureceta/tureceta.txt
esto es una zprueba
una zprueba
texto zde tureceta

y este script, básico, para imprimir cada linea:

#!/bin/sh
for i in `cat /home/tureceta/tureceta.txt`
do
echo $i
done

Como hemos visto, toma como delimitador el carácter espacio y muestra todas las palabras.

dgonzalez@David:~$ sh tureceta.sh
esto
es
una
zprueba
una
zprueba
texto
zde
tureceta

Si queremos podemos cambiar esta referencia con la variable IFS (internal field separator). Si queremos que imprima cada una de las lineas, debemos indicar que esta variable sea un salto de linea, de esta forma:

#!/bin/sh
IFS=$`\n`
for i in `cat /home/tureceta/tureceta.txt`
do
echo $i
done

Así mostraría este resultado:

dgonzalez@David:~$ sh tureceta.sh
esto es una zprueba
una zprueba
texto zde tureceta

Entendiendo esto, se puede usar como delimitador cualquier carácter, incluso una letra:

IFS=','
IFS=';'
IFS='.'
IFS='|'
IFS='z'

Entradas relacionadas

Etiquetas: ,

2 Responses to “for en bash. Configurar salto de linea en un fichero”

  1. Alex says:

    Muchas gracias!

    Justo me estaba pasando esto y encontré la solución en este post ;)

    Saludos

  2. gef3233 says:

    Me has salvado la vida con el IFS xD

    Muchas gracias :D

Leave a Reply