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 zfind -print0; opcja GNU).--delimiters=LISTA— długa, czytelniejsza forma-d(GNU).--serial— długa forma-s(GNU).--help— wyświetla skróconą pomoc,--versionpokazuje 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.