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:
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...
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]
gracias por tu ayuda, lo voy
gracias por tu ayuda, lo voy a intentar.