Divida a saída longa em duas colunas

20

Existe um utilitário ou script simples para coluna a saída de um dos meus scripts? Eu tenho dados de alguma forma:

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

mas se isso durar dois, escreva os dados da seguinte forma (onde ainda estão na vertical):

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

Ao ler a página de manual, acho que isso columnnão seria apropriado, mas não tenho certeza. É fácil dividir na forma:

A B 
C D 
E F

imprimindo apenas a \ncada segunda linha (o que meu script atual faz). Alguma ideia? Obrigado!

Hemmer
fonte

Respostas:

16

Você realmente tentou column ? Parece ser exatamente o que você deseja:

$ 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
fonte
Eu tentei. Mas erradamente (com -t)... But for yours to work reliably you probably need --columns`.
Hauke ​​Laging 04/07/13
Eu tentei, mas por algum motivo não percebi que dependia da largura da janela do seu terminal (parece óbvio agora)!
Hemmer
Também estava testando isso em duas máquinas ao mesmo tempo. Aparentemente, a versão antiga (cerca de 1993 na Scientific Linux) se comporta de forma diferente para a nova versão 2004 ...
Hemmer
11

Para colocar a saída em coluna, prconverte arquivos de texto para impressão:

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

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

por exemplo

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
fonte
não está funcionando corretamente para arquivos grandes (longos).
uma vez
2

Você pode dividir o arquivo em duas (com o mesmo número de linhas ou o primeiro arquivo com mais uma linha) e, em seguida, faça o seguinte:

paste file1 file2

Se o comprimento das linhas for muito diferente, pode ser necessário usar printf para adaptar os comprimentos preenchendo espaços.

Hauke ​​Laging
fonte
Ou ... | paste - - quando "longa saída de divisão" ...
don_crissti
1

Você pode usar simplesmente columns:

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

NOTA: o columnscomando faz parte do autogenpacote no meu sistema Fedora 14.

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

Referências

slm
fonte
columns: command not found. autogen ?
Gilles 'SO- stop be evil'
@ Gilles - sim, faz parte autogen. Acabei de verificar no meu sistema Fedora 14. Vou mencionar isso na resposta também.
slm