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.txtEine beispielhafte Ausgabe könnte so aussehen:
12 48 317 bobs_file.txtDie Zahlen stehen für Zeilen, Wörter und Bytes. Die Abstände dienen der übersichtlichen Ausrichtung; entscheidend ist die Reihenfolge.
| Ausgabeposition | Bedeutung | Hinweis |
|---|---|---|
| erste Zahl | Zeilen | Gezählt werden Zeilenumbrüche. |
| zweite Zahl | Wörter | Gezählt werden durch Leerraum getrennte Zeichenfolgen. |
| dritte Zahl | Bytes | Die gespeicherte Datenmenge der Datei. |
| letzte Spalte | Dateiname | Bezeichnet die analysierte Datei. |
Eine einzelne Datei zählen
Übergib den Dateinamen direkt an wc:
wc bobs_file.txtOrdne 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:
| Option | Gezählter Wert | Typischer Einsatzzweck | Beispiel |
|---|---|---|---|
-l | Zeilen | Anzahl der Zeilenumbrüche ermitteln | wc -l bobs_file.txt |
-w | Wörter | Durch Leerraum getrennte Wörter zählen | wc -w bobs_file.txt |
-c | Bytes | Gespeicherte Datenmenge bestimmen | wc -c bobs_file.txt |
Nur Zeilen zählen
wc -l bobs_file.txtDie Ausgabe enthält nur die Anzahl der gezählten Zeilenumbrüche und den Dateinamen.
Nur Wörter zählen
wc -w bobs_file.txtDamit erhältst du die Zahl der durch Leerraum getrennten Wörter in der Datei.
Nur Bytes zählen
wc -c bobs_file.txtDiese 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.txtFü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 totalDie 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 -lHier 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 -wDas 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 DATEIzeigt Zeilen, Wörter und Bytes.wc -l DATEIbeantwortet die Frage „Wie viele Zeilenumbrüche enthält die Datei?“wc -w DATEIbeantwortet die Frage „Wie viele Wörter enthält der Text?“wc -c DATEIbeantwortet die Frage „Wie viele Bytes sind gespeichert?“BEFEHL | wc -lzä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.txtpwd 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
wcsteht für word count und zählt Merkmale von Textdaten.- Ohne Option werden pro Datei Zeilen, Wörter und Bytes ausgegeben.
-lzählt Zeilenumbrüche,-wWörter und-cBytes.- Bei mehreren Dateien zeigt
wczusätzlich eine Gesamtsumme. - Über eine Pipe kann
wcauch die Ausgabe anderer Befehle auswerten. - Bei Standardeingabe fehlt der Dateiname in der Ausgabe.