Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Ethicalsk en 14 Noviembre 2015, 01:49 am



Título: Bash: imprimir columnas alineadas
Publicado por: Ethicalsk en 14 Noviembre 2015, 01:49 am
Hola que tal gente? Lo que quería era imprimir 3 valores en una misma linea de forma que queden alineados con la linea de abajo. Por ejemplo, si escribo:

Código:
for valor in 1 2 3; do
      echo "$nombre[valor]          $apellido[valor]           %DN[valor]I"
done;

La salida es:

Juan          Lopez              38192434
Rodrigo              Dominguez                          34372374234
Leonardo               Perez                           20943428323

Y yo quiero:

Juan                  Lopez                          38192434
Rodrigo            Dominguez                  34372374234
Leonardo          Perez                           20943428323

Espero que puedan ayudarme! saludos.


Título: Re: Bash: imprimir columnas alineadas
Publicado por: xiruko en 14 Noviembre 2015, 04:38 am
Código
  1. for valor in 1 2 3; do
  2.   echo -e "$nombre[valor]\t$apellido[valor]\t%DN[valor]I"
  3. done;

-e -> Hacer que echo interprete los carácteres especiales (los que empiezan con '\')
\t -> Tabulación

Saludos!


Título: Re: Bash: imprimir columnas alineadas
Publicado por: Skali en 14 Noviembre 2015, 05:50 am
genial! yo también hace mucho que quiero hacer eso y no sabía como


Título: Re: Bash: imprimir columnas alineadas
Publicado por: Ethicalsk en 14 Noviembre 2015, 05:53 am
Uhh hermano, sos un genio! Conocía el parámetro -e y la tabulación pero creí que solo se usaba para añadir un espaciamiento fijo digamos, y que igualmente quedaría todo desordenado, pero ahí probé y anda a la perfección!!! No te imaginas las soluciones raras e ineficientes que utilice para alinearlas, hice que mientras el tamaño de cada variable sea distinto a 25 ponele, ir agregando espacios en blanco, jajaja una locura!! Cargaba todo re lento...

Saludos brother!!!


Título: Re: Bash: imprimir columnas alineadas
Publicado por: Ethicalsk en 14 Noviembre 2015, 06:08 am
No, espera!!! Ahora que lo pruebo con el caso real que estoy tratando de hacer no me anda del todo bien, mira la salida:

(http://s12.postimg.org/k1ltp8jd9/Captura_de_pantalla_de_2015_11_14_02_15_34.png)


Título: Re: Bash: imprimir columnas alineadas
Publicado por: xiruko en 14 Noviembre 2015, 15:05 pm
Perdona, pensaba que con eso tan simple se solucionaría, supongo que funciona siempre que todas las celdas de la supuesta tabla tengan una longitud parecida, pero si hay algunas más largas que otras entonces deja de funcionar.

Puedes probar con el comando column para hacer lo que pides. Por ejemplo, sin el comando column esto es lo que te pasa a ti, que las columnas no están alineadas:

(http://s30.postimg.org/uyf2h0zvl/Screen_Shot_2015_11_14_at_14_58_18.png)

Y pasándole la salida de echo al comando column:

(http://s22.postimg.org/o1ajunynl/Screen_Shot_2015_11_14_at_15_03_03.png)

Saludos!


Título: Re: Bash: imprimir columnas alineadas
Publicado por: Ethicalsk en 14 Noviembre 2015, 16:38 pm
Genio de la vida! Jaja, como me vas a pedir perdón por ayudar!? Mil gracias!!! Cuando termine de hacer éste simple script lo publico en el foro para que lo tengan. Como podrás haber notado parsea el archivo donde se definen las system calls y muestra una salida más amigable, y también en hexa... Falta emprolijarlo y demas, pero cuando esté listo se los dejo! Abrazo!!!


Título: Re: Bash: imprimir columnas alineadas
Publicado por: xiruko en 14 Noviembre 2015, 23:10 pm
De nada colega, me alegro de que ya funcione!

Es buena idea que cuando acabes el script lo subas aquí para que cualquiera que lo necesite pueda aprender de él.

Saludos!


Título: Re: Bash: imprimir columnas alineadas
Publicado por: yMk369 en 16 Noviembre 2015, 02:35 am
Genial, la verdad to tampoco conocía "Column" aca un manpage http://linux.die.net/man/1/column

Ahora yo tengo una duda, yo utilizo  "notify-send". (por obvias razones)

notify-send -e  "Informativo de RAM" "RAM usada\tRAM libre\n$var1 MB\t$varl MB" | colum -t -s $'\t'

Pero no funciona, escapes siempre los he usado, (aun que solo en el cuerpo del mensaje)¿que me recomiendan?.

Saludos!