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!

Hemmer
fuente

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
terdon
fuente
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
...
Digix
fuente
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.

Hauke ​​Laging
fuente
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

slm
fuente
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