2010-06-03 10 views
7

Voglio unire le righe in modo che le linee unite siano allineate sullo stesso limite. UNIX paste (1) lo fa bene quando tutte le linee si incontrano allo stesso limite di tabulazione, ma quando le linee differiscono per dimensioni (nel file in cui le linee vengono unite), il testo risulta scomodo.Come allineare le colonne usando paste (1)? o come fare una tabella allineata per unire le linee nella shell?

Esempio di pasta (1) che ha l'effetto desiderato:

$ echo -e "a\nb\nccc\nd" | paste - - 
a  b 
ccc  d 

Esempio di pasta (1) con effetto indesiderato:

$ echo -e "a\nb\ncccccccccccc\nd" | paste - - 
a  b 
cccccccccccc d 

noti come 2a colonna non è allineata . Voglio "b" allineare con "d", che richiede una scheda aggiuntiva. Purtroppo credo che questo sia il limite per l'utility paste, quindi se qualcuno ha qualche idea su come ottenere l'effetto desiderato sopra, mi piacerebbe sentirlo.

+0

Provare a usare [ 'printf'] (http://linux.die.net/man/1/printf) per stampare i dati nei campi a larghezza fissa prima di passarlo a' paste' (assicurati che il campo sia lungo quanto il valore più lungo) – bta

risposta

9

Scopri i colonna utilità ...

$ echo -e "a\nb\ncccccccccccc\nd" | paste - - | column -t 
a    b 
cccccccccccc d 
1

È possibile utilizzare printf utility per creare output formattato, utilizzando gli stessi identificatori di formato di printf. Con gli specificatori di formato, è possibile specificare una larghezza minima del campo. Per esempio:

printf "%30s%30s\n" "Alpha" "Bravo" 
1

Vedi la risposta here di un modo semplice per gestire questo quando le linee possono avere spazi o altri caratteri che già utilizzano il pr comando. Per esempio:

pr -m -t -w 200 file1 file2 
Problemi correlati