Comando column in Linux: allineare testo in tabelle leggibili

column -t, nell’implementazione util-linux, dispone i campi del testo in una tabella con colonne allineate. È utile per leggere elenchi e risultati di comandi nel terminale; cambia la presentazione, senza verificare che i dati siano corretti o rispettino uno schema.

Il comando può leggere da file o dallo standard input. Il comportamento dipende dall’implementazione e dalla versione: opzioni per larghezza, ritorno a capo e colori non sono identiche ovunque. Prima di usare opzioni avanzate, consultate man column e, con util-linux, column --version e column --help.

Sintassi e modalità tabella

column [opzioni] [file...]

Usate -t quando ogni riga contiene i campi di una tabella. Senza questa opzione, column dispone normalmente un elenco su più colonne: è una modalità diversa, che riempie prima le colonne e può cambiare la disposizione degli elementi sullo schermo.

In modalità tabella, i campi sono separati per impostazione predefinita da spazi bianchi. Un valore contenente spazi, come un nome completo, può quindi essere diviso in più campi: scegliete un separatore esplicito che rispecchi i dati quando serve conservare quel valore intero.

Esempi con tutti i file di input preparati

Creare i dati e allineare la tabella

Eseguite questo primo blocco in Bash. Crea una directory nuova chiamata column-demo, vi entra e prepara due file di prova; se la directory esiste già, si interrompe senza sovrascriverne il contenuto. Se il blocco non riesce, non proseguite con gli esempi successivi finché non avete risolto il problema.

mkdir column-demo && cd column-demo && (
  set -e
  set -o noclobber
  printf 'PACKAGE VERSION\nalpha 1.0\nbeta-tools 2.3\n' > packages.txt
  printf 'USER:UID:SHELL\nana:1000:/bin/bash\nbob:1001:/bin/sh\n' > accounts.txt
  column -t packages.txt
)

L’output mostra l’intestazione PACKAGE/VERSION e le due righe alpha/1.0 e beta-tools/2.3 con la seconda colonna allineata. Il comando finale legge packages.txt e non lo modifica. I file restano nella directory di prova; la shell rimane in column-demo per gli esempi seguenti.

Leggere campi separati da due punti

Il file accounts.txt contiene soltanto utenti inventati per la prova. -s ':' indica il separatore in ingresso e -t crea la tabella:

column -s ':' -t accounts.txt

Vedrete tre colonne, USER, UID e SHELL, con ana/1000 e bob/1001 nelle rispettive righe. Su Linux, la forma column -s ':' -t /etc/passwd legge il file degli account del sistema; l’esempio usa invece dati preparati e riproducibili, senza dipendere dal contenuto di quel file.

Ricevere il risultato di una pipeline

Questo esempio è autonomo e non richiede un file già presente:

printf 'name score\nkim 90\nlee 85\n' | column -t

Vengono mostrate due colonne, name e score, con kim/90 e lee/85. Column aggiunge spazi per la presentazione, senza ordinare le righe in base al punteggio.

Confrontare l’output allineato

La larghezza di una colonna dipende dai valori da mostrare. In questo esempio il nome Benjamin richiede più spazio di Ana:

printf 'NAME AGE\nAna 7\nBenjamin 12\n' | column -t

Output di esempio, con due spazi fra la prima colonna alla sua larghezza massima e la seconda:

NAME      AGE
Ana       7
Benjamin  12

Le righe conservano l’ordine NAME, Ana, Benjamin. Qui «allineare» non significa ordinare alfabeticamente: column non sostituisce un comando di ordinamento. I numeri sono campi di testo e non vengono automaticamente validati o ordinati come valori numerici.

I dettagli degli spazi e della disposizione possono variare secondo versione e larghezza disponibile. L’output è pensato per una persona: se uno script deve leggere di nuovo i dati, conservate un formato esplicito, per esempio TSV, CSV correttamente codificato o JSON, senza ricostruire i campi dagli spazi aggiunti alla tabella.

Opzioni principali e separatori

Opzione Funzione nell’implementazione util-linux
-t Interpreta le righe come campi e crea una tabella allineata.
-s separatori Imposta i caratteri che possono separare i campi in ingresso. Non è un parser di virgolette CSV.
-o stringa Imposta la stringa fra le colonne dell’output in modalità tabella; il valore predefinito è costituito da due spazi.
-x Nella disposizione di un elenco senza -t, riempie prima le righe anziché prima le colonne.

Per rendere visibile il separatore in uscita, printf 'Ana:7\nBenjamin:12\n' | column -t -s ':' -o ' | ' usa una barra verticale con spazi fra le colonne. -s controlla l’input e -o l’output: cambiare l’uno non cambia automaticamente l’altro. Anche con un separatore visibile, gli spazi di allineamento rimangono parte della presentazione.

Nelle versioni util-linux dalla 2.23, separatori espliciti consecutivi preservano i campi vuoti: printf 'a:b:c\n1::3\n' | column -t -s ':' mantiene una posizione vuota nella seconda colonna della seconda riga. Confrontate il risultato con il manuale del sistema quando lavorate su versioni storiche o implementazioni diverse.

Larghezza, dati complessi e salvataggio

Non usate l’allineamento come verifica dei dati: una tabella con campi mancanti o in più può comunque apparire leggibile. Il solo separatore virgola non gestisce virgole racchiuse tra virgolette, doppi apici incorporati o record CSV su più righe. Analizzate prima il formato con un parser appropriato, poi scegliete come visualizzarlo.

Nel manuale corrente di util-linux, la larghezza predefinita è quella del terminale in modalità interattiva e 80 colonne quando l’output non è interattivo. L’opzione -c controlla la larghezza; valori molto lunghi non vengono necessariamente troncati. Per un rapporto destinato a un file, il manuale indica -c 0 per non imporre un limite di larghezza. Verificate comunque che l’opzione sia disponibile nella versione usata.

Per conservare l’esempio leggibile senza sovrascrivere un file già esistente, dalla directory della prova potete eseguire (set -o noclobber; column -t -c 0 packages.txt > packages-aligned.txt). Poi confrontate il contenuto visualizzato da cat packages-aligned.txt con la tabella originale. Il file allineato è un rapporto di presentazione; conservate anche packages.txt come input.

Per un risultato ripetibile, controllate larghezza, gestione dei caratteri e opzioni per colori e ritorni a capo dell’implementazione effettiva. I meccanismi recenti non vanno presunti disponibili nelle versioni precedenti. Per tornare alla directory iniziale dopo questa prova, usate cd ..; controllate il percorso e i file prima di eliminare eventuali materiali di esercizio.

Domanda frequente

Che cosa fare se il comando column non viene trovato?

Verificate quale pacchetto della vostra distribuzione fornisce column e se è installato. Il progetto util-linux include il comando, ma le distribuzioni possono suddividerne i programmi in pacchetti diversi. Consultate il catalogo o la documentazione ufficiale della distribuzione prima di installare un pacchetto dal nome presunto.

Documentazione di riferimento

La pagina di manuale del progetto util-linux per column descrive modalità, separatori, larghezza e differenze storiche. Confrontatela con man column e con l’help del programma installato per scegliere le opzioni effettivamente supportate.