Una mano con bash

Iniciado por santiago.lz, 7 Julio 2010, 19:06 PM

0 Miembros y 1 Visitante están viendo este tema.

santiago.lz

Buenas gente, soy nuevo en el foro.

Estoy haciendo unos trabajos en bash pero me tranque. El problema es que tengo una lista de parámetros y la tengo que mostrar invertida. Se que esta el comando "tac" que sirve para mostrar un archivo invertido, pero no se si sirve para mostrar un vector. Bueno, otro gran problema que tengo es que no tengo donde probar los scripts :-\

No se si se entendió el problema, acá lo dejo mas claro.

Yo tengo esto (que dicho sea de paso no se si funciona):

for i in $*; do
parametros [cont] = $i
cont = $(($cont + 1))
done


lo que quiero hacer es tener esos mismo datos invertidos en otro vector, me explico?

bueno, saludos y muchas gracias
Ni patria, ni dios, NACIONAL NACIONAL NACIONAL!!!

santiago.lz

Bueno, esta es una idea que tenia, pero no se como codificarlo.
La idea es hacer un for desde $cont hasta 0 restandole 1 cada vez que vuelve al principio, adentro del for le diria que al item [$cont] del vector parametros lo copie al nuevo vector llamado parametrosinvertidos pero con indice $cont2, despues de esto le sumo 1 a $cont2

Seria mas o menos asi:


for [ i -eq $cont; i -gt 0 ; i-- ]
parametrosinv [cont2] = parametros [i]
cont2 = $(($cont2 + 1))
done


A ver si a alguien se le ocurre como hacer eso en bash, porque la estructura del for es "for item in lista" eso que puse ahi creo que se puede hacer en awk pero no estoy seguro como.

Saludos y gracias de nuevo.
Ni patria, ni dios, NACIONAL NACIONAL NACIONAL!!!

leogtz

Código (bash) [Seleccionar]
#!/usr/bin/bash
normal=(1 2 3 4 5 6 7 8 9)
echo "Normal : ${normal[@]}"
invertido=($(echo "${normal[@]}" | awk '{for (i = NF; i>=1; i--) printf $i " "} END{print ""}'))
echo "Invertido : ${invertido[@]}"


leo@lein:~/Escritorio$ bash shit.sh
Normal : 1 2 3 4 5 6 7 8 9
Invertido : 9 8 7 6 5 4 3 2 1
leo@lein:~/Escritorio$


Código (bash) [Seleccionar]
#!/usr/bin/bash
normal=(1 2 3 4 5 6 7 8 9)
invertido=($(echo "${normal[@]}" | tac -s ' '))
echo -e "Invertido : ${invertido[@]}";
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

santiago.lz

#3
Muchas gracias :)

Si no es molestia tengo 2 consultas mas.

Primero si alguien sabe de algun "vi online" o una cosa asi, para poder probar lo que hago porque se me esta complicando hacerlo en block de notas y no tener donde probar.

Segundo, tengo q hacer un comando que corte un archivo en x partes iguales y cada parte la comprima usando el gzip. La sintaxis seria asi: $0 [-g] -n Archivo, donde -g comprime las partes restantes, -n dice en cuantas partes hay que cortar el archivo y Archivo es el archivo a cortar.

Esto es lo que pude hacer, pero cuando lo probe no me funciono


//primero miro el tamaño del archivo
tamArchivo = 'du $3'

//luego calculo que tamaño va a tener cada parte resultante
partes = $(($tamArchivo / $2))

//esto deberia cortar el archivo en el tamaño que le pido y comprimirlo pero no me funciono, capaz esta mal la sintaxis
split -b $partes $3 $3 | gzip



Saludos y gracias de nuevo.
Ni patria, ni dios, NACIONAL NACIONAL NACIONAL!!!