Linux/Unix Shell Scripting - for "string"

 
Vista:

for "string"

Publicado por Alex (2 intervenciones) el 03/06/2008 22:11:46
Hola,
tengo que programar un script que captura las temperaturas de una serie de ficheros y los muestra por pantalla.
Tengo una carpeta origen (DadesTemperatura) con diferentes carpetas con años dentro y dentro de cada una diferentes ficheros de diferentes poblaciones con las temperaturas mínima, máxima y mediana de cada mes.
El script se ejecuta de la siguiente manera: ./scriptB DadesTemperatura 2000 min
Las poblaciones son archivos '.tem' (p.e. Barcelona.tem).
El problema viene cuando tiene que capturar las temperaturas de algun fichero de una población con un nombre compuesto (p.e. Cervia de les Garrigues.tem) el cual lo coge como si fueran 4 archivos (uno por cada palabra de la población).
Para capturar el contenido de los ficheros para despues filtrarlo (que es la parte del codigo que si que funciona), utilizo el siguiente bucle:

for poblacio in $(ls $dir_base/$any)
do
paste $dir_base/$any/"$poblacio" >> poblacio
IFS=$' '
entrada=0
for linia in $(cat poblacio)
do
if [ $entrada -eq 0 ]
then
entrada=1
else
echo "$poblacio"$' '$linia >> poblacio2
fi

done
rm poblacio
done

Si alguien me podria decir como corregir el bucle for para que considerara toda la población como un string?, es muy urgente!

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:for

Publicado por Tom (361 intervenciones) el 18/06/2008 09:06:17
Utiliza siempre la variable entre comillas dobles, así evitarás que tome las "palabras sueltas"
Por otra parte, en el trozo de código que muestras, utiliza cat en lugar de paste.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:for

Publicado por Alex (2 intervenciones) el 18/06/2008 15:17:58
Gracias pero ya lo solucioné. Tenia que poner lo siguiente:
IFS='
'

Tal y como aparece, con una comilla en la linia de abajo, no es una errata, y tampoco tuve que cambiar el paste por cat.

Gracias de todos modos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:for

Publicado por Tom (361 intervenciones) el 26/06/2008 17:06:52
Ok, perfecto si funciona.

Input Field Separator (IFS) es el valor que utiliza el comando read para separar palabras _dentro_de_una_línea_ y una línea es (y no es nada conveniente cambiar este funcionamiento) un chorro de caracteres terminado en un carácter 'new line' (o CR o CR/NL).
Por tanto, cambiar, precisamente IFS a CR es una práctica que te dará más problemas que alegrías.
Aunque insisto, si funciona, vale.

Por otra parte, paste se programó para mezclar las líneas de 2 ficheros en otro. Si te funciona, también de acuerdo. También puedes clavar un clavo con los dientes, pero te aseguro que para eso se inventaron los martillos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar