Dividi l'output lungo in due colonne


20

Esiste una semplice utility o script per catalogare l'output di uno dei miei script? Ho dei dati in qualche forma:

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

ma se questo diventa due lunghi, scrivi i dati nel seguente modulo (dove è ancora ordinato verticalmente):

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

Dalla lettura della manpage, non penso che questo sia qualcosa per cui columnsarebbe appropriato, ma non ne sono sicuro. È abbastanza facile dividere il modulo:

A B 
C D 
E F

stampando solo \nogni seconda riga (cosa fa il mio attuale script). Qualche idea? Grazie!

Risposte:


16

Ci hai davvero provato column ? Sembra essere esattamente quello che vuoi:

$ 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

Ci ho provato. Ma a torto (con -t)... But for yours to work reliably you probably need --columns`.
Hauke ​​Laging

Ci ho provato ma per qualche motivo non mi ero reso conto che dipendesse dalla larghezza della finestra del terminale (sembra ovvio ora)!
Hemmer,

inoltre stavo testando questo su due macchine contemporaneamente. Apparentemente la vecchia versione (circa 1993 su Scientific Linux) si comporta in modo diverso rispetto alla versione più recente del 2004 ...
Hemmer,

11

Per colonne l'output, prconverte i file di testo per la stampa:

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

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

per esempio

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

non funziona correttamente per file di grandi dimensioni (lunghi).
una volta

2

Puoi dividere il file in due (con lo stesso numero di righe o il primo file con una riga in più) e quindi procedere come segue:

paste file1 file2

Se la lunghezza delle linee è troppo diversa, potrebbe essere necessario utilizzare printf per adattare le lunghezze riempiendo gli spazi.


O ... | paste - - quando si "divide l'output lungo" ...
don_crissti

1

Puoi usare semplicemente columns:

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

NOTA: il columnscomando fa parte del autogenpacchetto sul mio sistema Fedora 14.

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

Riferimenti


columns: command not found. autogeno ?
Gilles 'SO- smetti di essere malvagio' il

@Gilles - sì, fa parte di autogen. Ho appena controllato il mio sistema Fedora 14. Lo citerò anche nella risposta.
slm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.