cut

Wycina wybrane kolumny, pola lub znaki z każdej linii.

cut to klasyczny uniksowy nożyk do tekstu: czyta dane linia po linii i wycina z każdej z nich tylko to, co wskażesz — konkretne kolumny (pola), zakresy znaków albo bajtów. Idealny, gdy masz plik CSV, wyjście ls -l albo /etc/passwd i potrzebujesz wyłuskać jedną kolumnę zamiast męczyć się regexpami. Działa strumieniowo, więc świetnie wpina się w potoki między innymi komendami.

Składnia i najważniejsze opcje

Podstawowa forma to cut OPCJA... [PLIK...]. Musisz podać jeden z trybów: -f, -c albo -b. Bez pliku cut czyta ze standardowego wejścia.

  • -f LISTA — wybiera pola (kolumny), np. -f1,3 lub zakres -f2-5.
  • -d ZNAK — ustawia separator pól (domyślnie tabulator); współpracuje z -f.
  • -c LISTA — wycina znaki na podanych pozycjach, np. -c1-10.
  • -b LISTA — wycina bajty (uważaj przy UTF-8, gdzie znak to często kilka bajtów).
  • -s — pomija linie bez separatora (bez tego są wypisywane w całości).
  • --complement — odwraca wybór: bierze wszystko poza wskazanym (GNU).
  • --output-delimiter=STR — zmienia separator w wyjściu (GNU).

Przykłady użycia

  • cut -d: -f1 /etc/passwd — wypisuje same nazwy użytkowników z pliku passwd.
  • cut -d',' -f2,4 dane.csv — z CSV bierze tylko drugą i czwartą kolumnę.
  • echo "abcdef" | cut -c1-3 — zwraca abc, czyli pierwsze trzy znaki.
  • ps aux | cut -c1-20 — przycina szerokie wyjście ps do pierwszych 20 kolumn.
  • cut -d: --complement -f1 /etc/passwd — pokazuje wszystkie pola oprócz pierwszego.

Częste błędy i pułapki

Najczęstsza wpadka: cut traktuje separator dosłownie i nie zlepia powtórzonych spacji. Jeśli kolumny rozdzielają różne liczby spacji (jak w ls -l czy ps), -d' ' -f2 da śmieci — wtedy lepszy jest awk albo wcześniejszy tr -s ' '. Druga pułapka to -b kontra -c: na danych w UTF-8 cięcie po bajtach potrafi rozjechać polskie znaki, więc do tekstu używaj -c. Pamiętaj też, że cut nie zmienia kolejności pól: -f3,1 i tak wypisze je w naturalnej kolejności 1,3.

Różnice między systemami też kłują. Wersja GNU (Linux) zna --complement, --output-delimiter i -z (linie kończone bajtem null), ale cut z macOS/BSD ich nie ma — skrypt działający na Linuksie potrafi tam paść z błędem. Jeśli zależy ci na przenośności, sprawdź man cut na docelowej maszynie albo sięgnij po gcut z pakietu coreutils.

Powiązane komendy: awk (gdy potrzebujesz logiki i elastycznych separatorów), paste (sklejanie kolumn), column, tr oraz sort.