Comando paste in Linux: affiancare righe e scegliere i separatori
paste affianca le righe corrispondenti di più file e scrive il risultato sull’uscita standard, normalmente il terminale. Il separatore predefinito è una tabulazione; con -s puoi invece riunire le righe di ciascun file in una sola riga.
A differenza di cat, che concatena i contenuti uno dopo l’altro, paste unisce la prima riga con la prima, la seconda con la seconda e così via. Non cerca una chiave comune: l’ordine degli input deve già essere corretto. Se un file finisce prima degli altri, nella modalità normale i suoi campi successivi restano vuoti.
Sintassi di base
paste [OPTION]... [FILE]...
Le parentesi quadre indicano elementi facoltativi: sostituiscili con opzioni e percorsi reali. Per una lettura esplicita dallo standard input usa - al posto di un file. GNU paste legge lo standard input anche senza file, ma indicare - rende l’intenzione chiara e segue la forma prevista da POSIX. Controlla man paste per le opzioni della versione installata.
Esempi con file completi
Affiancare due file
Prepara due piccoli file nello stesso ordine: Ana ha punteggio 7 e Bob ha punteggio 12. Esegui questo blocco in una shell compatibile con Bash. La directory deve essere nuova: se paste-demo esiste già, la creazione fallisce e i comandi successivi non partono. Scegli un altro nome senza cancellare dati precedenti.
mkdir paste-demo && cd paste-demo && (
set -e
set -o noclobber
printf 'Ana\nBob\n' > names.txt
printf '7\n12\n' > scores.txt
paste names.txt scores.txt
)
Ottieni Ana e 7 sulla prima riga, Bob e 12 sulla seconda, separati da una tabulazione reale. L’allineamento visivo dipende dalle posizioni di tabulazione del terminale. Rimani nella directory paste-demo per gli esempi successivi; i file originali non vengono modificati.
Scegliere un separatore
Per inserire due punti fra il nome e il punteggio:
paste -d ':' names.txt scores.txt
Il risultato è Ana:7 seguito da Bob:12, su due righe. Con più file, una lista come -d ':,' usa prima i due punti, poi la virgola, quindi ricomincia se occorrono altri separatori. Nella modalità normale la lista riparte dall’inizio a ogni riga di output: non rappresenta un unico separatore composto da più caratteri.
Trasformare le righe di un file in una riga
Con -s paste elabora un file alla volta, unendo le sue righe:
paste -s -d ',' names.txt
L’output è Ana,Bob, seguito da un carattere di nuova riga. Se aggiungi scores.txt allo stesso comando, ottieni una seconda riga 7,12: i due file non vengono fusi in un’unica riga. Per un file vuoto, la modalità seriale produce una riga vuota.
Affiancare due input senza creare file
La sostituzione di processo di Bash, <(...), rende l’uscita di ciascun comando disponibile come input. Questa prova è indipendente dai file precedenti e non crea file di dati permanenti:
paste -d, <(printf 'Ana\nBob\n') <(printf '7\n12\n')
Output atteso:
Ana,7
Bob,12
Una shell solo POSIX, per esempio una configurazione di sh senza questa estensione, non interpreta necessariamente <(...). In tal caso prepara i due file come nell’esempio iniziale e usa paste -d, names.txt scores.txt.
Per leggere un file e una pipe insieme puoi usare printf '7\n12\n' | paste -d: names.txt -: l’uscita sarà ancora Ana:7 e Bob:12. Ripetere - significa consumare righe successive dello stesso standard input, non duplicarlo: printf 'a\nb\nc\n' | paste -d, - - produce a,b e poi c,, perché manca la quarta riga.
Opzioni e formato dei delimitatori
| Opzione o formato | Significato |
|---|---|
-d lista |
Usa a rotazione i delimitatori della lista al posto della tabulazione. Racchiudi fra apici le sequenze con barra inversa. |
-s |
Unisce le righe di ogni file separatamente, rispettando l’ordine dei file. La lista dei delimitatori riparte per ciascun file. |
- |
Legge dallo standard input nella posizione del corrispondente argomento. |
Per eliminare il separatore usa -d '\0': in questa opzione \0 indica la stringa vuota, non un byte NUL. Con i file di prova paste -d '\0' names.txt scores.txt produce Ana7 e Bob12. Non confonderlo con l’estensione GNU -z, che cambia il terminatore delle righe in NUL; verifica il manuale locale prima di usare estensioni.
Precauzioni: corrispondenza, righe mancanti e salvataggio
Controlla che le righe nella stessa posizione rappresentino lo stesso oggetto. Se i punteggi sono in ordine inverso, paste affianca comunque il primo punteggio al primo nome senza segnalare un errore. Per abbinare record tramite un campo comune, consulta la guida in inglese al comando join e rispetta le sue condizioni di ordinamento.
Se il secondo file contiene solo 7, il comando con -d ':' produce Ana:7 e Bob:. Il separatore resta presente nel campo mancante. Una riga vuota all’interno di un file occupa comunque una posizione: non viene saltata. Per verificare gli input puoi leggerli con cat names.txt e cat scores.txt; prima di associare dati reali controlla anche la loro provenienza e il loro ordine.
Un separatore a virgola non crea automaticamente un CSV valido per dati arbitrari. paste non aggiunge virgolette né protegge virgole, virgolette o nuove righe contenute nei valori: usa una libreria per la scrittura di CSV quando occorre gestirle.
Per salvare il risultato in una destinazione nuova, nella directory di prova esegui paste -d ':' names.txt scores.txt > combined.txt, poi controlla cat combined.txt. La redirezione può sovrascrivere un file già esistente. Non usare come destinazione uno degli input: la shell può svuotarlo prima che paste lo legga. Se un comando fallisce, controlla il messaggio d’errore e il codice di uscita prima di utilizzare il risultato.
Domande frequenti
Qual è la differenza fra paste e join?
paste affianca le righe in base alla posizione; join abbina righe con lo stesso valore in un campo comune e richiede input ordinati secondo la chiave e le condizioni appropriate. Un ordine sbagliato negli input di paste può creare associazioni errate anche quando il comando termina correttamente.
Documentazione di riferimento
La pagina di manuale GNU di paste su man7 descrive le opzioni della versione documentata. Il riferimento POSIX per paste specifica il comportamento standard, inclusi i file di lunghezza diversa e la modalità seriale.




