paste

Łączy odpowiadające sobie linie wielu plików obok siebie (w kolumnach).

paste to mały, ale wdzięczny scalacz tekstu. Bierze odpowiadające sobie linie z kilku plików i skleja je obok siebie w jednej linii, rozdzielając tabulatorem. Mówiąc obrazowo: jeśli cat ustawia pliki jeden pod drugim, to paste ustawia je ramię w ramię, w kolumnach. Świetnie nadaje się do montażu tabel z osobnych list (np. nazwy + adresy IP), budowania CSV w locie albo do błyskawicznego spłaszczenia listy do jednej linii.

Składnia i najważniejsze opcje

Podstawowa składnia wygląda tak: paste [opcje] [plik...]. Jeśli zamiast nazwy pliku podasz -, paste czyta ze standardowego wejścia.

  • -d LISTA — ustawia własny separator zamiast tabulatora; możesz podać kilka znaków, używanych po kolei (np. -d ',:').
  • -s — scala szeregowo: każdy plik trafia do jednej linii zamiast łączenia plików równolegle kolumna w kolumnę.
  • -z — używa znaku NUL jako separatora linii zamiast nowej linii (przydatne z find -print0; opcja GNU).
  • --delimiters=LISTA — długa, czytelniejsza forma -d (GNU).
  • --serial — długa forma -s (GNU).
  • --help — wyświetla skróconą pomoc, --version pokazuje wersję (GNU).

Przykłady użycia

paste nazwy.txt ip.txt — skleja linia po linii nazwy hostów z ich adresami IP, rozdzielając tabulatorem.

paste -d, kolumna1.txt kolumna2.txt > out.csv — buduje plik CSV z dwóch list, oddzielając pola przecinkiem.

paste -s -d, lista.txt — zamienia pionową listę (jedna pozycja na linię) w jedną linię z wartościami po przecinku.

ls | paste -d' ' - - - — układa wynik ls w trzy kolumny, czytając to samo wejście trzy razy przez -.

paste -d'\n' plik_a.txt plik_b.txt — przeplata linie obu plików naprzemiennie, używając znaku nowej linii jako separatora.

Częste błędy i pułapki

Najczęstsza wpadka to założenie, że paste dopasowuje linie po treści — nie dopasowuje. Skleja po numerze linii, więc jeśli pliki mają różną długość, brakujące pola zostaną puste i kolumny się rozjadą. Posortuj dane wcześniej (np. sort), jeśli kolejność ma znaczenie.

Pamiętaj, że -d definiuje listę pojedynczych znaków, a nie ciąg. -d ', ' oznacza naprzemiennie przecinek i spację, a nie separator dwuznakowy. Druga pułapka: separator między kolumnami trafia tylko między pola, nie na końcu linii.

Uważaj na różnice między systemami. Wersja GNU (Linux) ma -z oraz długie opcje, natomiast paste z macOS/BSD ich nie obsługuje — tam zostają tylko -d i -s. Skrypt napisany pod Linuksem może więc paść na Macu.

Powiązane komendy: cut (odwrotność — wycina kolumny), join (łączy pliki po wspólnym kluczu), column (ładnie wyrównuje kolumny), cat oraz pr.