VMware ESXi and vSphere Cluster Management

Zeilen, Wörter und Bytes mit wc zählen

Lerne, wie du mit dem Linux-Befehl wc Zeilen, Wörter und Bytes einzelner oder mehrerer Dateien sowie von Befehlsausgaben zählst.

Der Linux-Befehl wc zählt Textmerkmale. Sein Name leitet sich von word count (Wortzählung) ab. Du kannst damit Dateien oder Daten aus der Standardeingabe untersuchen und schnell ihre Größe und ihren grundlegenden Inhalt einschätzen.

In dieser Lektion geht es vor allem um Zeilen, Wörter und Bytes. Voraussetzung sind grundlegende Terminalkenntnisse sowie der Umgang mit Dateien, Pfaden und Befehlen wie ls und cat.

Was macht wc?

wc verarbeitet entweder einen oder mehrere Dateinamen oder liest Daten aus der Standardeingabe. Die Standardeingabe ist ein Datenstrom, den ein Befehl zum Beispiel über eine Pipe erhält.

Ohne Optionen gibt wc für jede Datei drei Werte aus: die Anzahl der Zeilen, die Anzahl der Wörter und die Anzahl der Bytes. Diese Reihenfolge ist festgelegt.

Die Standardausgabe verstehen

wc bobs_file.txt

Eine beispielhafte Ausgabe könnte so aussehen:

      12      48     317 bobs_file.txt

Die Zahlen stehen für Zeilen, Wörter und Bytes. Die Abstände dienen der übersichtlichen Ausrichtung; entscheidend ist die Reihenfolge.

AusgabepositionBedeutungHinweis
erste ZahlZeilenGezählt werden Zeilenumbrüche.
zweite ZahlWörterGezählt werden durch Leerraum getrennte Zeichenfolgen.
dritte ZahlBytesDie gespeicherte Datenmenge der Datei.
letzte SpalteDateinameBezeichnet die analysierte Datei.

Eine einzelne Datei zählen

Übergib den Dateinamen direkt an wc:

wc bobs_file.txt

Ordne die drei Werte immer von links nach rechts zu: Zeilen, Wörter, Bytes. Der Dateiname am Ende zeigt, auf welche Eingabedatei sich die Werte beziehen.

Die gezählten Einheiten

Zeilen und Zeilenumbrüche

Eine Zeile ist ein Textabschnitt, der normalerweise durch einen Zeilenumbruch abgeschlossen wird. Ein Zeilenumbruch ist ein Steuerzeichen, das das Ende einer Textzeile markiert.

wc -l zählt deshalb technisch die Zeilenumbruch-Zeichen und nicht einfach die sichtbaren Textblöcke. Enthält die letzte Textzeile keinen abschließenden Zeilenumbruch, kann die Zahl anders wirken als die Anzahl der Zeilen, die du beim Anzeigen mit einem Editor wahrnimmst.

Wörter

Für wc ist ein Wort eine durch Leerraum abgegrenzte Folge von Zeichen. Als Leerraum gelten unter anderem Leerzeichen, Tabulatoren und Zeilenumbrüche. Mehrere aufeinanderfolgende Leerraumzeichen trennen Wörter, erzeugen aber nicht jeweils ein zusätzliches Wort.

Bytes

Ein Byte ist eine Einheit der gespeicherten Datenmenge. Die Byte-Anzahl entspricht nicht zwangsläufig der Zahl sichtbarer Zeichen. In UTF-8 benötigen beispielsweise viele Umlaute und andere nicht-ASCII-Zeichen mehrere Bytes. Auch unsichtbare Steuerzeichen werden mitgezählt.

Einzelne Zählarten mit Optionen auswählen

Eine Option ist ein Schalter, der das Verhalten eines Befehls verändert. Die wichtigsten Optionen von wc sind:

OptionGezählter WertTypischer EinsatzzweckBeispiel
-lZeilenAnzahl der Zeilenumbrüche ermittelnwc -l bobs_file.txt
-wWörterDurch Leerraum getrennte Wörter zählenwc -w bobs_file.txt
-cBytesGespeicherte Datenmenge bestimmenwc -c bobs_file.txt

Nur Zeilen zählen

wc -l bobs_file.txt

Die Ausgabe enthält nur die Anzahl der gezählten Zeilenumbrüche und den Dateinamen.

Nur Wörter zählen

wc -w bobs_file.txt

Damit erhältst du die Zahl der durch Leerraum getrennten Wörter in der Datei.

Nur Bytes zählen

wc -c bobs_file.txt

Diese Option zeigt die Anzahl der Bytes an, aus denen die Datei besteht.

Wenn du Zeichen statt Bytes untersuchen möchtest, bieten viele Unix-Implementierungen zusätzlich -m an. Das ist besonders bei UTF-8-Texten relevant: Zeichen- und Byte-Anzahl können dort voneinander abweichen.

Mehrere Dateien auswerten

Du kannst mehrere Dateinamen in einem Aufruf angeben:

wc einleitung.txt kapitel1.txt kapitel2.txt

Für jede Datei gibt wc eine eigene Zeile mit den jeweiligen Zählwerten aus. Zusätzlich erscheint eine Gesamtsumme, häufig mit dem Bezeichner total.

       4       20     140 einleitung.txt
      18       91     642 kapitel1.txt
      11       57     401 kapitel2.txt
      33      168    1183 total

Die letzte Zeile ist keine weitere Datei. Sie fasst die Werte aller verarbeiteten Dateien zusammen.

wc mit Standardeingabe und Pipes verwenden

Der Shell-Operator | heißt Pipe. Er leitet die Ausgabe eines Befehls als Standardeingabe an den nächsten Befehl weiter.

ls | wc -l

Hier zählt wc -l die Ausgabezeilen von ls. Das Ergebnis hängt vom Ausgabeformat, der Umgebung und den Dateinamen ab. Es ist daher nicht immer gleichbedeutend mit der exakten Anzahl von Dateien.

Auch eine direkte Textausgabe kann gezählt werden:

printf 'eins zwei drei\n' | wc -w

Das Ergebnis ist 3, weil die Standardeingabe drei durch Leerraum getrennte Wörter enthält. Bei Daten aus einer Pipe wird normalerweise kein Dateiname ausgegeben, weil keine benannte Datei übergeben wurde.

Typische Arbeitsmuster

  • wc DATEI zeigt Zeilen, Wörter und Bytes.
  • wc -l DATEI beantwortet die Frage „Wie viele Zeilenumbrüche enthält die Datei?“
  • wc -w DATEI beantwortet die Frage „Wie viele Wörter enthält der Text?“
  • wc -c DATEI beantwortet die Frage „Wie viele Bytes sind gespeichert?“
  • BEFEHL | wc -l zählt die Zeilen einer Befehlsausgabe.

Fehler und unerwartete Ergebnisse

Die Zahl sichtbarer Zeilen stimmt nicht

Prüfe, ob die letzte Zeile mit einem Zeilenumbruch endet. wc -l zählt Newline-Zeichen. Eine letzte Textzeile ohne dieses Zeichen wird deshalb nicht auf dieselbe Weise berücksichtigt wie eine abgeschlossene Zeile.

Die Byte-Anzahl passt nicht zu sichtbaren Zeichen

Bei UTF-8 können einzelne sichtbare Zeichen mehrere Bytes belegen. Außerdem können Dateien unsichtbare Steuerzeichen enthalten. Vergleiche bei Bedarf Bytes mit der zeichenorientierten Option wc -m.

Eine zusätzliche Zeile mit total erscheint

Das ist bei mehreren Eingabedateien normal. wc zeigt erst die Einzelwerte und danach die aggregierte Gesamtsumme.

Eine Datei kann nicht geöffnet werden

Häufig ist der Dateiname falsch, das aktuelle Verzeichnis nicht das erwartete oder die Datei nicht lesbar. Prüfe den Ort und den Namen:

pwd
ls
wc datei.txt

pwd zeigt das aktuelle Verzeichnis. Mit ls kontrollierst du, ob die Datei dort liegt. Verwende andernfalls einen korrekten relativen oder absoluten Pfad und prüfe bei Bedarf die Leserechte.

Die Pipe-Ausgabe enthält keinen Dateinamen

Das ist normal: wc liest in diesem Fall Standardeingabe statt einer Datei mit Namen. Der Zahlenwert bezieht sich auf den empfangenen Datenstrom.

Zusammenfassung

  • wc steht für word count und zählt Merkmale von Textdaten.
  • Ohne Option werden pro Datei Zeilen, Wörter und Bytes ausgegeben.
  • -l zählt Zeilenumbrüche, -w Wörter und -c Bytes.
  • Bei mehreren Dateien zeigt wc zusätzlich eine Gesamtsumme.
  • Über eine Pipe kann wc auch die Ausgabe anderer Befehle auswerten.
  • Bei Standardeingabe fehlt der Dateiname in der Ausgabe.