Przejdź do głównej zawartości

cut


  • cut – standardowa komenda systemów Unix/Linux służąca do selektywnego wyodrębniania fragmentów plików lub strumieni tekstowych, bazując na numerach kolumn, bajtów lub znaków.
  • Często używana w potokach (|) do filtrowania danych CSV/TSV, logów czy wyników innych narzędzi (np. grep, awk).
  • Dostępna domyślnie w większości dystrybucji Linuksa, macOS, BSD oraz w środowiskach POSIX‑owych.

Okno terminala
cut [opcje] [plik ...]
  • Może czytać z plików lub ze standardowego wejścia (stdin).
  • Najczęstsze przełączniki globalne: -d (delimiter), -f (fields), -c (characters), -b (bytes), --complement (odwrotność wyboru).

ParametrOpis
-d <znak>Ustala znak separatora pól (domyślnie ).
-f <zakres>Wybiera podane pola (kolumny) – np. 1,3, 2‑, ‑4.
-c <zakres>Wyodrębnia zakres znaków w każdym wierszu.
-b <zakres>Wyodrębnia zakres bajtów (różni się przy UTF‑8).
--complementZwraca wszystko poza wskazanym zakresem.
-sPomija wiersze bez separatora, gdy używasz -f.
--output-delimiter=<znak>Ustala znak wyjściowego separatora pól.

Okno terminala
# Wyodrębnienie 1. i 3. kolumny (roz­dzielnik to przecinek)
cut -d"," -f1,3 dane.csv
# Zmiana separatora wyjściowego na średnik
cut -d"," -f2‑ --output-delimiter=";" dane.csv
# Pobranie pierwszych 10 znaków każdego wiersza z pliku
cut -c1‑10 raport.txt
# Wyświetlenie wszystkich bajtów poza pierwszymi pięcioma
cut -b6‑ --complement < bin.log | hexdump -C

  • Kodowanie znaków: -c działa na znakach Unicode, ale -b na surowych bajtach – przy UTF‑8 wynik może się różnić.
  • Separator TAB: bez -d domyślnym ogranicznikiem kolumn jest znak tabulacji.
  • Różnice powłok: w niektórych shellach należy ująć zakresy w apostrofy, by zapobiec rozwinięciu przez powłokę (np. cut -f "1-3").

Błąd / KomunikatPrzyczynaRozwiązanie
cut: the delimiter must be a single characterPodano wieloznakowy separatorUżyj jednego znaku lub narzędzi typu awk.
cut: -f list exhaustedZakres pól wykracza poza liczbę kolumnZweryfikuj zakres lub dodaj --complement.
Linie bez separatora dają pełny wierszBrak -s przy -fDodaj -s, by pominąć wiersze bez separatora.