paste în Linux / Bash

Procesare și filtrare text POSIX / GNU coreutils

Lipește rândurile mai multor fișiere unul lângă altul sau unește toate rândurile unui fișier într-unul singur.

Sintaxă comandă
paste [-d LISTĂ] [-s] fișier1 fișier2 ...

Ce face paste

Comanda paste citește în paralel mai multe fișiere și scrie pe același rând primul rând din fiecare fișier, apoi al doilea rând din fiecare și așa mai departe. Implicit pune un tab între ele. Este operația inversă lui cut: cut scoate coloane, paste le alătură.

Cu -s (serial) comanda lucrează altfel: ia toate rândurile unui fișier și le pune pe un singur rând. Combinată cu -d,, transformă o listă într-un șir separat prin virgulă. Pentru a citi de la intrarea standard se dă - ca nume de fișier.

Opțiuni și argumente

Opțiune / Parametru Descriere
-d LISTĂ Caracterele folosite ca separator în loc de tab (ex. -d, sau -d';'). Dacă lista are mai multe caractere, sunt folosite pe rând.
-s Lipește rândurile fiecărui fișier unul după altul, pe un singur rând.
- Citește de la intrarea standard (dintr-un pipe). Dacă apare de două ori, ia câte două rânduri pe rând.

Exemple

Exemplul 1: Alăturarea a două liste: nume și orașe

Rândul 1 din primul fișier ajunge lângă rândul 1 din al doilea, separate prin ;.

printf 'Ana\nMihai\nIoana\n' > nume.txt
printf 'Iași\nCluj\nBrașov\n' > orase.txt
paste -d';' nume.txt orase.txt

Rezultat

Ana;Iași
Mihai;Cluj
Ioana;Brașov

Exemplul 2: Transformarea unei liste într-un șir separat prin virgulă

-s pune toate rândurile pe unul singur, iar - spune că datele vin din pipe.

printf 'Ana\nMihai\nIoana\n' | paste -sd, -

Rezultat

Ana,Mihai,Ioana

Exemplul 3: Gruparea rândurilor câte două

Cu - -, paste citește două rânduri din intrarea standard pentru fiecare rând scris: util când un fișier are numele pe un rând și nota pe rândul următor.

printf 'Ana\n9\nMihai\n10\nIoana\n8\n' | paste -d' ' - -

Rezultat

Ana 9
Mihai 10
Ioana 8

Greșeli frecvente

  • Fișiere cu număr diferit de rânduri: paste nu dă eroare, ci lasă câmpuri goale pentru fișierul mai scurt. Verifică întâi numărul de rânduri cu wc -l.
  • Așteptarea ca paste să potrivească rândurile după o cheie (ca un JOIN): comanda lipește doar după poziție. Pentru potrivire după cheie folosește join (pe fișiere sortate) sau awk.

Comenzi înrudite

  • cut: Decupează secțiuni, coloane sau intervale de caractere din fiecare linie de text.
  • column: Aliniază textul în coloane, transformând rânduri separate prin spații sau virgule într-un tabel ușor de citit.
  • comm: Compară două fișiere sortate și arată ce rânduri sunt doar în primul, doar în al doilea sau în amândouă.
  • awk: Limbaj de procesare a textului structurat pe coloane, ideal pentru rapoarte și extragere de date.