Bash: imprimir columnas alineadas

Iniciado por Ethicalsk, 14 Noviembre 2015, 01:49 AM

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

Ethicalsk

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:

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.

xiruko

Código (bash) [Seleccionar]
for valor in 1 2 3; do
   echo -e "$nombre[valor]\t$apellido[valor]\t%DN[valor]I"
done;


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

Saludos!

Skali

genial! yo también hace mucho que quiero hacer eso y no sabía como

Ethicalsk

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!!!

Ethicalsk

#4
No, espera!!! Ahora que lo pruebo con el caso real que estoy tratando de hacer no me anda del todo bien, mira la salida:


xiruko

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:



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



Saludos!

Ethicalsk

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!!!

xiruko

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!

yMk369

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!