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.