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'

noviembre 24th, 2010 21:52
Muchas gracias!
Justo me estaba pasando esto y encontré la solución en este post
Saludos
junio 11th, 2011 11:21
Me has salvado la vida con el IFS xD
Muchas gracias