Formattazione del testo in colonne


11

Ho un file con due colonne come mostrato di seguito (esempio):

FILE 1:

John 1
Peter 2
Michael Rod 3
Su 7
Louise 9

Devo formattare questo e il mio output previsto dovrebbe essere:

FILE 1:

John        1
Peter       2
Michael Rod 3
Su          7
Louise      9

1
dove sono le 2 colonne?
marc

Entrambe le uscite sembrano essere le stesse. Potresti fornire maggiori dettagli sulla tua domanda?

2
Come vengono definite le colonne? C'è una scheda o qualche altro carattere tra il nome e il numero? Come possiamo sapere che Michael Rod 3sono 2 colonne e non 3?
terdon

2
No, non pubblicare immagini di testo . Stavo solo per copiare e incollare quel testo per poterti aiutare, e ora non posso.
Kusalananda

1
idem che cosa hanno detto mmmint e terdon; puoi specificare, ad esempio, che è l' ultima colonna che deve essere rientrata per consentire la larghezza della linea più lunga?
Jeff Schaller

Risposte:


18

Se l'input fosse stato solo di due colonne, avrei suggerito di utilizzare column -t. Questo non funziona abbastanza qui, poiché l' columnutilità tratterà qualsiasi numero di spazi o schede come delimitatori di colonna:

$ column -t file1
John     1      
Peter    2      
Michael  Rod  3 
Su       7      
Louise   9      

"Michael Rod" è composto da due colonne, in modo che quella singola abbia una colonna in più rispetto alle altre, il che rovina l'output.

Possiamo aggirare questo inserendo un carattere di tabulazione prima dell'ultima colonna e quindi columnusarlo (solo) come delimitatore:

$ awk '{ $NF = "\t" $NF; print }' file1 | column -t -s $'\t'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9

In Awk, NFè il numero di campi (colonne) ed $NFè i dati nell'ultimo campo. Lo script che sto usando modifica semplicemente i dati dell'ultimo campo anteponendo un carattere di tabulazione, prima di stampare la riga completa.

Se la tua shell non capisce $'\t', puoi scegliere un altro personaggio che non fa parte dei dati:

awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9
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.