Wörter, Zeilen und Bytes mit wc zählen
Lerne, wie du mit wc unter Linux Zeilen, Wörter und Bytes einzelner oder mehrerer Dateien sowie Pipeline-Ausgaben zählst.
Der Linux-Befehl wc zählt Inhalte. Sein Name ist die Abkürzung für word count, also „Wortzählung“. Obwohl der Name auf Wörter hinweist, kann wc außerdem Zeilen und Bytes zählen.
Der Befehl wird häufig mit Textdateien verwendet, funktioniert aber grundsätzlich mit Daten aus einer Datei oder aus der Standardeingabe. Für den Einstieg sind Kenntnisse über das aktuelle Verzeichnis, Dateinamen und einfache Befehlsoptionen hilfreich. Grundlagen dazu findest du bei grundlegenden Linux-Befehlen und beim Arbeiten mit Dateien.
Was zählt wc?
Ohne zusätzliche Optionen gibt wc drei Kennzahlen aus: die Anzahl der Zeilen, die Anzahl der Wörter und die Anzahl der Bytes. Bei einer Datei folgt außerdem deren Dateiname.
Eine Zeile wird bei wc im Normalfall durch einen Zeilenumbruch beendet. Die Option -l zählt deshalb technisch Zeilenumbrüche. Ein Wort ist eine durch Leerraum abgegrenzte Folge von Zeichen. Leerzeichen, Tabulatoren und Zeilenumbrüche dienen dabei als Trennzeichen. Ein Byte ist eine Einheit für die Datenmenge; wc -c zählt die Bytes des gelesenen Inhalts.
Grundsyntax
wc [OPTION]... DATEI...
Mindestens ein Dateiname kann angegeben werden. Mehrere Dateinamen sind ebenfalls erlaubt. Die Zahlen in der Ausgabe gehören jeweils zu dem Dateinamen, der am Ende der Ergebniszeile steht.
Die Standardausgabe verstehen
Die Standardausgabe hat diese Reihenfolge:
Die letzte Spalte ist nur vorhanden, wenn wc eine Datei über ihren Namen verarbeitet. Bei Eingaben aus einer Pipeline muss kein Dateiname ausgegeben werden.
Eine Datei auswerten
Mit einem Dateinamen rufst du wc so auf:
wc bobs_file.txt
Angenommen, die Datei enthält genau diese zwei Zeilen:
Hallo Bob
Linux zählt
Die Datei enthält zwei Zeilenumbrüche, vier Wörter und 23 Bytes. Bei einer UTF-8-Kodierung benötigt das ä in „zählt“ zwei Bytes. Eine mögliche Ausgabe lautet daher:
2 4 23 bobs_file.txt
Die erste Zahl ist die Zeilenanzahl, die zweite die Wortanzahl, die dritte die Byteanzahl. Die vierte Angabe ordnet diese Werte der Datei bobs_file.txt zu.
Mehrere Dateien auswerten
Mehrere Dateien werden hintereinander angegeben:
wc bobs_file.txt alice_file.txt
wc gibt für jede Datei eine eigene Ergebniszeile aus. Danach folgt eine zusätzliche Zeile mit der Bezeichnung total. Sie enthält die Summe der Werte aller verarbeiteten Dateien.
2 4 23 bobs_file.txt
3 6 41 alice_file.txt
5 10 64 total
Die Abstände zwischen den Spalten können je nach Ausgabe variieren. Entscheidend ist die Reihenfolge der Werte, nicht die genaue Anzahl der Leerzeichen.
Einzelne Kennzahlen mit Optionen ausgeben
Optionen sind Schalter, die bestimmen, welche Kennzahl ausgegeben wird. Die wichtigsten Optionen sind:
Nur Zeilen zählen
wc -l bobs_file.txt
Die Ausgabe enthält nur die Anzahl der Zeilen und den Dateinamen, beispielsweise 2 bobs_file.txt.
Nur Wörter zählen
wc -w bobs_file.txt
Dieser Aufruf gibt die Anzahl der durch Leerraum getrennten Wörter aus, beispielsweise 4 bobs_file.txt.
Nur Bytes zählen
wc -c bobs_file.txt
Damit ermittelst du die Byteanzahl des Dateiinhalts, beispielsweise 23 bobs_file.txt. Bei Zeichen außerhalb des ASCII-Zeichensatzes kann die Byteanzahl größer sein als die Anzahl der sichtbaren Zeichen.
Alle drei Optionen können auch mit mehreren Dateinamen kombiniert werden:
wc -l bobs_file.txt alice_file.txt
Dann erscheint für jede Datei eine Zeilenzahl und zusätzlich eine total-Summe.
Eingabe über die Standardeingabe
Wird kein Dateiname angegeben, liest wc aus der Standardeingabe. Das kann eine Eingabe von der Tastatur oder die Ausgabe eines anderen Befehls sein. Eine Pipeline verbindet Befehle mit dem Zeichen | und leitet die Ausgabe des ersten Befehls als Eingabe an den zweiten weiter.
printf 'eins zwei drei\n' | wc -w
printf erzeugt den Text, danach zählt wc -w die Wörter. Die Ausgabe ist:
3
Da keine Datei als Argument angegeben wurde, muss in dieser Ausgabe kein Dateiname stehen. Dieses Muster ist nützlich, wenn du nicht eine gespeicherte Datei, sondern die Ausgabe eines Befehls zählen möchtest.
Typische Probleme und ihre Lösungen
Die Zeilenzahl wirkt um eins zu niedrig
wc -l zählt Zeilenumbrüche, nicht einfach die sichtbaren Textzeilen. Endet die letzte sichtbare Zeile nicht mit einem Zeilenumbruch, wird sie von wc -l nicht als zusätzlicher Zeilenumbruch gezählt. Speichere die Datei bei Bedarf mit einem abschließenden Zeilenumbruch und prüfe anschließend erneut.
Eine Datei kann nicht geöffnet werden
Bei einer Fehlermeldung solltest du den Dateinamen und den Pfad prüfen. Stelle mit ls fest, ob die Datei im aktuellen Verzeichnis vorhanden ist. Bei einem anderen Verzeichnis musst du einen relativen oder absoluten Pfad angeben. Zusätzlich können fehlende Leserechte die Ursache sein. Grundlagen zu diesem Thema beschreibt der Artikel über Zugriffsrechte.
ls
ls -l bobs_file.txt
Die Wortzahl entspricht nicht der erwarteten sprachlichen Wortanzahl
wc versteht keine Grammatik und bewertet keine sprachliche Bedeutung. Es trennt anhand von Leerraum. Satzzeichen bleiben daher am jeweiligen Zeichenbestandteil, und besondere Formatierungen können zu einer anderen Zahl führen als eine manuelle Zählung. Bei speziellen Daten musst du den Text vor dem Zählen gegebenenfalls mit weiteren Shell-Werkzeugen aufbereiten.
Die Zeile total erscheint zusätzlich
Das ist bei mehreren Eingabedateien normal. wc fasst die Werte aller zuvor aufgeführten Dateien in dieser zusätzlichen Gesamtzeile zusammen.
Wichtige Merksätze
wc DATEIzeigt standardmäßig Zeilen, Wörter, Bytes und den Dateinamen.-lsteht für Zeilen,-wfür Wörter und-cfür Bytes.- Die Zeilenzählung basiert auf Zeilenumbrüchen.
- Die Wortzählung ist eine technische, leerraum-basierte Zählung.
- Bei mehreren Dateien gibt es zusätzlich eine
total-Zeile. - Ohne Dateinamen liest
wcaus der Standardeingabe und eignet sich besonders für Pipelines.