So verwenden Sie den wc-Befehl unter Linux

Veröffentlicht: 2022-07-23
Linux-Laptop mit einer Bash-Eingabeaufforderung
fatmawati achmad zaenuri/Shutterstock.com

Das Zählen der Zeilen, Wörter und Bytes in einer Datei ist nützlich, aber die wirkliche Flexibilität des Linux- wc -Befehls ergibt sich aus der Zusammenarbeit mit anderen Befehlen. Lass uns einen Blick darauf werfen.

Was ist der WC-Befehl?

Der wc Befehl ist eine kleine Anwendung. Es ist eines der wichtigsten Linux-Dienstprogramme, daher muss es nicht installiert werden. Es befindet sich bereits auf Ihrem Linux-Computer.

Sie können in wenigen Worten beschreiben, was es tut. Es zählt die Zeilen, Wörter und Bytes in einer Datei oder einer Auswahl von Dateien und gibt das Ergebnis in einem Terminalfenster aus. Es kann seine Eingabe auch aus dem STDIN-Stream beziehen, was bedeutet, dass der Text, den es verarbeiten soll, hineingeleitet werden kann. Hier beginnt wc wirklich, Mehrwert zu schaffen.

So verwenden Sie Pipes unter Linux
RELATED How to Use Pipes on Linux

Es ist ein großartiges Beispiel für das Linux-Mantra „Mach eine Sache und mach es gut“. Da es Piped Input akzeptiert, kann es in Multi-Command-Beschwörungen verwendet werden. Wie wir sehen werden, ist dieses kleine eigenständige Dienstprogramm tatsächlich ein großartiger Teamplayer.

Ich verwende wc unter anderem als Platzhalter in einem komplizierten Befehl oder Alias, den ich mir ausdenke. Wenn der fertige Befehl das Potenzial hat, destruktiv zu sein und Dateien zu löschen, verwende ich wc oft als Ersatz für den echten, gefährlichen Befehl.

Auf diese Weise erhalte ich während der Entwicklung des Befehls ein visuelles Feedback, dass jede Datei wie erwartet verarbeitet wird. Es besteht keine Chance, dass etwas Schlimmes passiert, während ich mit der Syntax ringe.

So einfach wc auch ist, es gibt immer noch ein paar kleine Macken, über die Sie Bescheid wissen müssen.

Erste Schritte mit WC

Die einfachste Art, wc zu verwenden, besteht darin, den Namen einer Textdatei auf der Befehlszeile zu übergeben.

 wc lorem.txt 

Verwendung von wc mit einer Datei mit einer langen Textzeile

Dies veranlasst wc , die Datei zu scannen und die Zeilen, Wörter und Bytes zu zählen und sie in das Terminalfenster zu schreiben.

Wörter werden als alles angesehen, was durch Leerzeichen begrenzt ist. Ob es sich um Wörter aus einer realen Sprache handelt oder nicht, spielt keine Rolle. Wenn eine Datei nur „frd g lkj“ enthält, zählt sie trotzdem als drei Wörter.

Zeilen sind Folgen von Zeichen, die entweder durch einen Wagenrücklauf oder das Ende der Datei abgeschlossen werden. Es spielt keine Rolle, ob die Zeile in Ihrem Editor oder im Terminalfenster umgebrochen wird, bis wc auf einen Wagenrücklauf oder das Ende der Datei trifft, es ist immer noch dieselbe Zeile.

Unser erstes Beispiel fand eine Zeile in der gesamten Datei. Hier ist der Inhalt der Datei „lorem.txt“.

 Katze lorem.txt 

Der Inhalt der Datei mit einer langen Zeile

All das zählt als eine einzige Zeile, weil es keine Wagenrückläufe gibt. Vergleichen Sie dies mit einer anderen Datei, „lorem2.txt“, und wie wc sie interpretiert.

 wc lorem2.txt
 Katze lorem2.txt 

Verwendung von wc mit einer Datei mit vielen Zeilen

Diesmal zählt wc 15 Zeilen, da Wagenrückläufe in den Text eingefügt wurden, um an bestimmten Stellen eine neue Zeile zu beginnen. Wenn Sie jedoch die Zeilen mit Text zählen, sehen Sie, dass es nur 12 sind.

Die anderen drei Zeilen sind Leerzeilen am Ende der Datei. Diese enthalten nur Wagenrückläufe. Obwohl in diesen Zeilen kein Text steht, wurde eine neue Zeile begonnen und daher zählt wc sie als solche.

Wir können so viele Dateien an wc übergeben, wie wir möchten.

 wc lorem.txt lorem2.txt 

Verwenden von wc mit zwei Dateien

Wir erhalten die Statistiken für jede einzelne Datei und eine Summe für alle Dateien.

Wir können auch Platzhalter verwenden, damit wir passende Dateien anstelle von explizit benannten Dateien auswählen können.

 WC *.txt *.? 

Verwenden von wc mit Platzhaltern

Die Befehlszeilenoptionen

Standardmäßig zeigt wc die Zeilen, Wörter und Bytes in jeder Datei an. Es ist dasselbe wie die Verwendung der Optionen -l (Zeilen), -w (Wörter) und -c (Bytes).

 wc lorem.txt
 wc -l -w -c lorem.txt 

Verwendung von wc mit den Optionen lines, words und bytes

Wir können angeben, welche Zahlenkombination wir sehen möchten.

 wc -l lorem.txt

wc -w lorem.txt

wc -c lorem.txt

wc -l -c lorem.txt 

Verwenden von WC mit Kombinationen von Optionen

Besondere Aufmerksamkeit sollte der letzten Zahl geschenkt werden, die von der Option -c (Bytes) generiert wird. Viele Leute verwechseln dies mit dem Zählen der Zeichen. Es zählt tatsächlich Bytes . Die Anzahl der Zeichen und die Anzahl der Bytes können durchaus gleich sein. Aber nicht immer.

Schauen wir uns den Inhalt einer Datei namens „unicode.txt“ an.

 Katze unicode.txt 

Der Inhalt einer Datei, die ein nicht-lateinisches Zeichen enthält

Es besteht aus drei Wörtern und einem nicht-lateinischen Buchstaben. Wir lassen wc die Datei mit der Standardeinstellung bytes verarbeiten und wiederholen dies, fordern aber Zeichen mit der Option -m (Zeichen) an.

 wc unicode.txt
 wc -l -w -m unicode.txt 

Zählen der Bytes in einer Datei und dann Zählen der Zeichen in derselben Datei

Es gibt mehr Bytes als Zeichen.

Schauen wir uns den Hex-Dump der Datei an und sehen, was los ist. Die Option -C (kanonisch) des hexdump -Befehls zeigt die Bytes in der Datei in Zeilen von 16 an, wobei ihr einfaches ASCII-Äquivalent (falls vorhanden) am Ende der Zeile angezeigt wird. Wenn kein entsprechendes ASCII-Zeichen vorhanden ist, wird ein Punkt „ . “ wird stattdessen angezeigt.

 hexdump -C unicode.txt 

Ein Hexdump einer kurzen Datei mit einem nicht-lateinischen Zeichen

In ASCII repräsentiert ein Hexadezimalwert von 0x20 ein Leerzeichen. Wenn wir drei Werte von links zählen, sehen wir, dass der nächste Wert ein Leerzeichen ist. Die ersten drei Werte 0x62 , 0x6f und 0x79 repräsentieren also die Buchstaben in „Junge“.

Wenn wir über die 0x20 springen, sehen wir einen weiteren Satz von drei hexadezimalen Werten: 0x63 , 0x61 und 0x74 . Diese buchstabieren „Katze“. Wenn wir über das nächste Leerzeichen springen, sehen wir drei weitere Werte für die Buchstaben in „Hund“. Dies sind 0x64 , 0x5f und 0x67 .

Direkt hinter dem Wort „Hund“ sehen wir ein Leerzeichen 0x20 und fünf weitere Hexadezimalwerte. Die letzten beiden sind Wagenrückläufe, 0x0a .

Die anderen drei Bytes stellen das nicht-lateinische Zeichen dar, das wir grün umrandet haben. Es ist ein Unicode-Zeichen und es werden drei Bytes benötigt, um es zu codieren. Dies sind 0xe1 , 0xaf und 0x8a .

Stellen Sie also sicher, dass Sie wissen, was Sie zählen, und dass Bytes und Zeichen nicht gleich sein müssen. Normalerweise ist das Zählen von Bytes nützlicher, da es Ihnen sagt, was sich tatsächlich in der Datei befindet. Das Zählen nach Zeichen gibt Ihnen die Anzahl der Dinge , die durch den Inhalt der Datei dargestellt werden.

VERWANDT: Was sind Zeichencodierungen wie ANSI und Unicode und wie unterscheiden sie sich?

Dateinamen aus einer Datei übernehmen

Es gibt eine andere Möglichkeit, wc Dateinamen bereitzustellen. Sie können die Dateinamen in eine Datei einfügen und den Namen dieser Datei an wc übergeben. Es öffnet die Datei, extrahiert die Dateinamen und verarbeitet sie so, als ob sie auf der Befehlszeile übergeben worden wären. Auf diese Weise können Sie eine beliebige Sammlung von Dateinamen zur Wiederverwendung speichern.

Aber es gibt ein Problem, und es ist ein großes. Die Dateinamen müssen mit Null und nicht mit Wagenrücklauf terminiert sein. Das heißt, nach jedem Dateinamen muss statt des üblichen Carriage-Return-Bytes 0x0a ein Null-Byte von 0x00 stehen.

Sie können keinen Editor öffnen und eine Datei mit diesem Format erstellen. Typischerweise werden solche Dateien von anderen Programmen generiert. Aber wenn Sie eine solche Datei haben, würden Sie sie so verwenden.

Hier ist unsere Datei mit den Dateinamen. Wenn Sie es in less öffnen, sehen Sie die seltsamen „ ^@ “-Zeichen, die less verwendet, um Nullbytes anzuzeigen.

 weniger source-files-list.txt 

Eine Datei in less, die Nullbytes enthält

Um die Datei mit wc zu verwenden, müssen wir die Option --files0-from (Eingabe lesen von) verwenden und den Namen der Datei übergeben, die die Dateinamen enthält.

 wc ---files0-from=source-files-list.txt 

wc verarbeitet die Datei mit nullterminierten Dateinamen

Die Dateien werden genau so verarbeitet, als ob sie auf der Kommandozeile bereitgestellt würden.

Rohrleitungseingang zum WC

Eine viel gebräuchlichere, flexiblere und produktivere Möglichkeit, Eingaben an wc zu senden, besteht darin, die Ausgabe von anderen Befehlen an wc zu leiten. Wir können dies mit dem echo Befehl demonstrieren.

 echo "Zähle das für mich" | Toilette
 echo -e "Zähle das\nfür mich" | Toilette 

Echo verwenden, um Eingaben an WC zu senden

Der zweite echo -Befehl verwendet die Option -e (Escape-Zeichen), um Sequenzen mit Escape-Zeichen wie den Zeilenumbruch-Formatierungscode „ \n “ zuzulassen. Dies fügt eine neue Zeile ein, wodurch wc die Eingabe als zwei Zeilen sieht.

Hier ist eine Kaskade von Befehlen, die ihre Eingaben von einem zum anderen weiterleiten.

 find ./* -type f | Drehzahl | Schnitt -d'.' -f1 | Drehzahl | sortieren | einzigartig
  • find sucht rekursiv nach Dateien ( type -f ), beginnend im aktuellen Verzeichnis. rev kehrt die Dateinamen um.
  • cut extrahiert das erste Feld ( -f1 ), indem als Feldbegrenzer ein Punkt „ definiert wird . “ und liest von der „Vorderseite“ des umgekehrten Dateinamens bis zum ersten gefundenen Punkt. Wir haben jetzt die Dateierweiterung extrahiert.
  • rev kehrt das extrahierte erste Feld um.
  • sort sortiert sie in aufsteigender alphabetischer Reihenfolge.
  • uniq listet eindeutige Einträge im Terminalfenster auf.

Die Liste der eindeutigen Erweiterungen in der aktuellen Verzeichnisstruktur

Dieser Befehl listet alle eindeutigen Dateierweiterungen im aktuellen Verzeichnis und allen Unterverzeichnissen auf.

Wenn wir dem uniq Befehl die Option -c (count) hinzufügen würden, würde er die Vorkommen jedes Erweiterungstyps zählen. Aber wenn wir wissen wollen, wie viele verschiedene, eindeutige Dateierweiterungen es gibt, können wir wc als letzten Befehl in der Zeile ablegen und die Option -l (Zeilen) verwenden.

 find ./* -type f | Drehzahl | Schnitt -d'.' -f1 | Drehzahl | sortieren | einzigartig | WC-l 

Hinzufügen von wc zum Zählen der eindeutigen Erweiterungen

VERWANDT: So verwenden Sie den Linux-Cut-Befehl

Und schlussendlich

Hier ist ein letzter Trick, den wc für Sie tun kann. Es zeigt Ihnen die Länge der längsten Zeile in einer Datei an. Leider sagt es dir nicht, um welche Zeile es sich handelt. Es gibt nur die Länge an.

 wc -L taf.c 

Abrufen der Länge der längsten Zeile in einer Datei mit wc

Beachten Sie jedoch, dass Tabulatoren als acht Leerzeichen gezählt werden. In meinem Editor angezeigt, befinden sich am Anfang dieser Zeile drei Tabulatoren mit zwei Leerzeichen. Seine tatsächliche Länge beträgt 124 Zeichen. Die gemeldete Zahl wird also künstlich erweitert.

Ich würde diese Funktion mit einer großen Prise Salz behandeln. Und damit meine ich nicht verwenden. Seine Ausgabe ist irreführend.

Trotz seiner Macken ist wc ein großartiges Werkzeug, um in Pipe-Befehle einzusteigen, wenn Sie alle möglichen Werte zählen müssen, nicht nur die Wörter in einer Datei.

VERWANDT: 37 Wichtige Linux-Befehle, die Sie kennen sollten