Dividir la salida larga en dos columnas.


20

¿Existe una utilidad o script simple para columnatear la salida de uno de mis scripts? Tengo datos de alguna forma:

A aldkhasdfljhaf
B klajsdfhalsdfh
C salkjsdjkladdag
D lseuiorlhisnflkc
E sdjklfhnslkdfhn
F kjhnakjshddnaskjdh

pero si esto se convierte en dos largos, escriba los datos en la siguiente forma (donde todavía están ordenados verticalmente):

A aldkhasdfljhaf    D lseuiorlhisnflkc
B klajsdfhalsdfh    E sdjklfhnslkdfhn
C salkjsdjkladdag   F kjhnakjshddnaskjdh

Al leer la página de manual, no creo que esto sea algo columnapropiado, pero no estoy seguro. Es bastante fácil dividir en la forma:

A B 
C D 
E F

imprimiendo solo \ncada segunda línea (lo que hace mi script actual). ¿Algunas ideas? ¡Gracias!

Respuestas:


16

¿Realmente lo intentaste column ? Parece ser exactamente lo que quieres:

$ cat file
A aldkhasdfljhaf
B klajsdfhalsdfh
C salkjsdjkladdag
D lseuiorlhisnflkc
E sdjklfhnslkdfhn

$ column file
A aldkhasdfljhaf    D lseuiorlhisnflkc
B klajsdfhalsdfh    E sdjklfhnslkdfhn
C salkjsdjkladdag   F kjhnakjshddnaskjdh

Lo intenté. Pero erróneamente (con -t)... But for yours to work reliably you probably need --columnas`.
— Hauke ​​Laging

¡Lo intenté pero por alguna razón no me di cuenta de que dependía del ancho de la ventana de su terminal (ahora parece obvio)!
— Hemmer

También estaba probando esto en dos máquinas a la vez. Aparentemente, la versión anterior (circa 1993 en Scientific Linux) se comporta de manera diferente a la versión más reciente de 2004 ...
— Hemmer

11

Para columnatear la salida, prconvierte archivos de texto para imprimir:

-COLUMN, --columns=COLUMN: output COLUMN columns
      and print columns down, unless -a is used.

-t, --omit-header : omit page headers and trailers

p.ej

ls /etc | pr -2 -t
abrt                                gtk-2.0
acpi                                hal
adjtime                             hba.conf
agent.properties                    host.conf
aliases                             hosts
aliases.db                          hosts.allow
...

no funciona correctamente para archivos grandes (largos).
— una vez

2

Puede dividir el archivo en dos (con el mismo número de líneas o el primer archivo con una línea más) y luego hacer esto:

paste file1 file2

Si la longitud de las líneas es demasiado diferente, puede ser necesario usar printf para adaptar las longitudes rellenando con espacios.


O ... | paste - - cuando "divide la salida larga" ...
— don_crissti

1

Puedes usar simplemente columns:

$ cat test.txt | columns
A aldkhasdfljhaf             B klajsdfhalsdfh             C salkjsdjkladdag
D lseuiorlhisnflkc           E sdjklfhnslkdfhn            F kjhnakjshddnaskjdh

NOTA: el columnscomando es parte del autogenpaquete en mi sistema Fedora 14.

$ rpm -qf /usr/bin/columns
autogen-5.9.4-7.fc12.x86_64

Referencias


columns: command not found. autogen ?
— Gilles 'SO- deja de ser malvado'

@Gilles: sí, es parte de autogen. Acabo de revisar mi sistema Fedora 14. Lo mencionaré en la respuesta también.
— slm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.