shell scripts; función dentro de for

Forums: 

Hola, soy novato en linux y estoy intentando hacer un scripts que coja los valores del principio del scrips y los introduzca posteriormente en una variable para procesarlo. Me explico, tengo al principio del scripts lo siguiente:

10 cajas
14 bolsos
etc...

he pensado en meterlos en una función para poder procesarlos fila por fila con for:

valores () {
10 cajas
14 bolsos
}

for i in valores
do
variable1=`printf "%1s %sn" $i | awk ' {printf (NF)}`
variable2=`printf "%1s %sn" $i | awk ' {printf (NF-1)}`

echo $variable1 #esto me debería dar como valor 10 y después 14
echo $variable1 #esto me debería dar como valor cajas y después bolsos

done

No se si estoy equivocado en la forma de hacerlo. Gracias por vuestra ayuda.

Yo lo haría:

Imagen de ndante

Creo un archivo tipo:

cat >> ~/datos << "EOF"
10 cajas
14 bolsos
...
EOF

Luego en el programa haría:

function funcion
{
variable1 = $1
variable2 = $2
variable1=`printf "%1s %sn" $i | awk ' {printf (NF)}` #Si te digo la verdad no se para
variable2=`printf "%1s %sn" $i | awk ' {printf (NF-1)}`#que sirve esto :D

echo $variable1
echo $variable2
}

for i in $(cat ~/datos | sed -e "s/\ /X5.SEE/g");
do
funcion (i | sed -e "s/X5.SEE/\ /g" )
done

Creo que en tehoría esto devería funcionar como tu quieres... (si te he entendido bien, que es otra)

De toas formas revisa bien la 'gramatica', porque actualmente estoy con C++ y mesclo un poco :(

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses-5.5
To:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Muchas gracias por tu ayuda.

Muchas gracias por tu ayuda. Ya he solucionado lo que quería y era tan sencillo como meterlo dentro de una variable en vez de una función:

lista="
10 cajas
14 bolsos
etc..
"

y luego procesarlo con for.

Lo de "printf "%1s %sn" $i " es listarlo es dos columnas y poder cojer cualquiera de las dos palabaras (tal y como está escrito arriba), ya que sin eso lo lista como con echo, todo seguido, y con awk cojo la ultima palabara (NF) o la penultima (NF-1), así cada vuelta de for las dos variables definidas como variable1 y variable2 son las dos palabaras de cada fila, si no me equivoco.

Gracias

Sabiendo lo que ahora se...

Imagen de ndante

con el archivo que te decia antes ~/control y:

function funcion {
echo $1
echo $2
}

for i in $(cat ~/datos | sed -e "s/\ /X5.SEE/g");
do
funcion (i | sed -e "s/X5.SEE/\ /g" )
done

tambien logras lo que tu quieres, lo otro sobraba, pues hace lo que mi 'cat' + 'sed'. cat lee por lineas, pero pasa a for por palabras. sed rellena primero los espacios (una sola palabra por linea) y luego los vuelve a generar para darle a funcion sus dos variables.
funciona, testado clinicamente :D

Que no digo que el tuyo no, simplemente mejoro mi respuesta anterior :D

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses-5.5
To:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]