Przejdź do głównej zawartości

pr


  • pr – klasyczny filtr do paginacji i składu plików tekstowych przed wydrukiem lub podglądem (np. w less/lpr).
  • Potrafi: dodawać nagłówek/stopkę z datą/nazwą pliku i numerem strony, dzielić na kolumny, ustawiać szerokość strony, wcięcia, liczby wierszy, wybierać zakres stron.
  • Występuje w GNU coreutils (Linux) oraz w BSD / macOS (składnia bardzo podobna; drobne różnice opcji).

Okno terminala
pr [opcje] [PLIK...]
  • Wejściem jest tekst (z pliku lub stdin), wyjściem — sformatowany tekst (na stdout), który można przekierować do less/lpr.
  • Warianty: układ w N kolumnach, łączenie wielu plików równolegle (po kolumnie), wybór zakresu stron.

ParametrOpis
+P[:Q]Zacznij od strony P i opcjonalnie zakończ na Q (np. +3:5).
-NUłóż w N kolumnach (np. -2, -3).
-a, --acrossKolumny wypełniane po wierszach (w poprzek), domyślnie „w dół”.
-m, --mergeScal wiele plików: każdy plik w osobnej kolumnie.
-t, --omit-headerBez nagłówków/stopek (goła treść, przydatne do potoków).
-F, -f, --form-feedOddzielaj strony znakiem FF (form feed), zamiast pustych linii.
-h "NAGŁÓWEK"Własny nagłówek zamiast nazwy pliku/czasu.
-l NUMDługość strony w wierszach (domyślnie ok. 66).
-w NUMSzerokość strony w znakach (domyślnie ok. 72).
-o NUMLewy margines (wcięcie) o NUM spacjach.
-s[ZNAK]Separator między kolumnami (domyśl. spacje). Np. -s|.
-d, --double-spacePodwójne odstępy między wierszami.
-n[SEP[DIG]]Numeruj wiersze; opcj. separator SEP (np. :) i szerokość DIG (np. -n:4).
-NNUMUstaw początkowy numer wiersza (z -n).
-JNie dziel długich wierszy — zawijaj bez rozbijania słów (w niektórych implementacjach BSD).

Uwaga: Zestaw opcji i domyślne wartości mogą się różnić między GNU coreutils a BSD/macOS/BusyBox. Sprawdź man pr na danej platformie.


Okno terminala
# 1) Układ w 2 kolumnach, własny nagłówek, szerokość 100, podgląd w less
pr -2 -h "Raport tygodniowy" -w 100 raport.txt | less
# Efekt: czytelny podgląd, węższe kolumny mieszczą się na ekranie.
Okno terminala
# 2) Druk tylko stron 3–5 długiego pliku
pr +3:5 długi_plik.txt | lpr
# Efekt: do drukarki trafi tylko zakres stron.
Okno terminala
# 3) Złączenie dwóch plików równolegle w kolumnach (porównanie wersji)
pr -m -t wersja1.txt wersja2.txt | less -S
# Efekt: kolumna 1 = plik1, kolumna 2 = plik2; bez nagłówków, wygodne do diffu „na oko”.
Okno terminala
# 4) Numerowanie wierszy z separatorem dwukropka i szerokością 4 cyfr
pr -n:4 -w 90 README.md | less
# Efekt: numer linii w polu 4‑znakowym (np. " 12:").
Okno terminala
# 5) Kolumny w poprzek i niestandardowy separator pionowej kreski
pr -3 -a -s'|' -w 120 dane.txt | less -S
# Efekt: wiersze rozkładane w poprzek kolumn; kolumny oddzielone '|'.
Okno terminala
# 6) Wcięcie 4 spacje i rozdział stron znakiem form feed (dla klasycznych drukarek)
pr -o 4 -F dokument.txt > sformatowany.txt
# Efekt: każda nowa strona zaczyna się od FF; przydatne dla niektórych sterowników/lpr.

  • Domyślne nagłówki: zawierają zwykle datę/godzinę, nazwę pliku (lub stdin) i numer strony.
  • Różne systemy, różne drobiazgi: macOS/BSD mogą mieć dodatkowe/nieco inne opcje (np. zachowanie -J). GNU pr bywa bardziej przewidywalny w skryptach na Linuksie.
  • Szerokość/łamanie: Przy zbyt małej -w część linii zostanie zawinięta. Do poziomego przewijania w podglądzie użyj less -S.
  • Kolumny a dane tabelaryczne: pr jest do składu tekstu, nie do justowania CSV. Do tabel użyj column -t, rs, paste lub narzędzi tekstowych.
  • Druk: Typowy potok do drukarki: pr [opcje] plik | lpr. Do PDF użyj systemowego „wydrukuj do PDF”.

Błąd / KomunikatPrzyczynaRozwiązanie
pr: illegal option -- <x> / unrecognized optionRóżnice implementacji (GNU vs BSD) lub literówkaSprawdź man pr na swoim systemie; dobierz właściwy odpowiednik lub usuń nieobsługiwaną opcję.
page width too narrow / ucięte linieZa małe -w dla treści/kolumnZwiększ -w, zmniejsz liczbę kolumn, wyłącz numerowanie, użyj less -S.
Nieprawidłowy zakres +P:QZły format lub P>QPodaj liczby całkowite, zachowaj P ≤ Q; użyj samego +P aby zacząć od strony P.
Dziwny układ kolumnBrak -a albo niewłaściwy separatorDodaj -a dla wypełniania w poprzek lub `-s''` jako separator.
Brak polskich znaków w wydrukuZły font/kodowanie w ścieżce drukowaniaUpewnij się, że LC_CTYPE/LANG i sterownik drukarki obsługują UTF‑8; ewentualnie użyj innego filtra.