wc-commando: regels en woorden tellen en wc -l met pipes gebruiken
Het wc-commando is een Linux-commando dat het aantal regels, woorden en bytes in een bestand telt en toont. Als je met wc -l de regels telt van een voorbeeldbestand met het toegangslog van een webserver, krijg je 10, en als je met grep alleen de 404-antwoorden filtert en aan wc -l doorgeeft, zie je het aantal mislukte verzoeken, 3, als één getal.
De logs, bestandsinhoud en de werkmap /root/work hieronder zijn voorbeeldwaarden. Het log is een bestand van tien regels met IP-adressen die voor documentatie zijn gereserveerd, en ook de andere bestanden zijn allemaal voor tests gemaakt.
1️⃣ Basisgebruik van het wc-commando en de uitvoer lezen
De basisvorm van het commando is wc, dan opties, dan bestanden. Geef je alleen een bestand zonder opties, dan toont wc achter elkaar het aantal regels, woorden en bytes en zet het de bestandsnaam aan het eind.
cd /root/workwc access.log 10 100 766 access.logIn het resultaat voor het toegangslog is 10 het aantal regels, 100 het aantal woorden en 766 het aantal bytes.
Wil je maar één getal zien, voeg dan een van de opties -l, -w of -c toe.
wc -l access.log10 access.logwc -w access.log100 access.logwc -c access.log766 access.logGeef je een bestand op dat niet bestaat, dan verschijnt er een foutmelding en is de exitcode 1.
wc nosuch.txtwc: nosuch.txt: No such file or directoryecho $?12️⃣ Regels tellen met wc -l en pipes
Als bij het tellen van regels ook de bestandsnaam wordt getoond, moet je die naam nog een keer afknippen wanneer je het getal in een scriptvariabele opslaat. Geef je het bestand door via een omleiding (<) of een pipe, dan kent wc de bestandsnaam niet en toont het alleen het getal.
wc -l < access.log10cat access.log | wc -l10Zet je grep vóór de pipe, dan tel je alleen de regels die aan een voorwaarde voldoen. Er is gezocht met de spaties voor en na de antwoordcode 404, en drie regels bevatten 404.
grep ' 404 ' access.log | wc -l3Om te tellen hoeveel IP's verbinding maakten, knip je alleen het eerste veld uit, verwijder je dubbele regels met sort -u en tel je daarna. In het log van tien regels stonden vier verschillende IP's.
cut -d ' ' -f 1 access.log | sort -u192.0.2.10
192.0.2.44
198.51.100.7
203.0.113.25cut -d ' ' -f 1 access.log | sort -u | wc -l4wc -l telt het aantal regeleindetekens. Daarom toont wc -l bij een bestand zonder regeleinde aan het eind van de laatste regel 1, ook al laat cat twee regels zien.
cat no-newline.txtfirst line
last linewc -l no-newline.txt1 no-newline.txtKomt het aantal regels er één te laag uit, controleer dan eerst of de laatste regel eindigt met een regeleinde.
3️⃣ wc-opties en het aantal tekens met -c en -m
In UTF-8 nemen Engelse letters en cijfers 1 byte per teken in, terwijl Koreaanse tekens (Hangul) en ☕ elk 3 bytes innemen. In een bestand met alleen Engelse tekst zijn het aantal bytes van -c en het aantal tekens van -m daarom gelijk, maar zodra er Koreaans in staat, verschillen de twee getallen. De vergelijking gebruikt een bestand met twee regels Koreaanse menunamen en één regel in het Engels.
cat menu.txt아메리카노
카페 라테 ☕
teawc -c menu.txt38 menu.txtwc -m menu.txt18 menu.txt-c gaf 38 en -m gaf 18, een verschil van 20. Dat zijn de 2 extra bytes die elk van de negen Koreaanse tekens en ☕ inneemt, dus bij een bestand met Koreaans tel je met -m om op het werkelijke aantal tekens uit te komen. De meting is gedaan in de locale C.UTF-8, en volgens de handleiding telt -m in de tekeneenheden van de locale.
-L toont de weergavebreedte van de langste regel. In het toegangslog was de langste regel 82 kolommen breed; in het menubestand neemt elk Koreaans teken en ☕ twee kolommen in, waardoor een regel van 7 tekens 12 gaf.
wc -L access.log82 access.logwc -L menu.txt12 menu.txtLatijnse letters met een accent nemen in UTF-8 2 bytes per teken in. Dat is apart gemeten met een bestand dat alleen de regel café bevat.
cat cafe.txtcaféwc -c cafe.txt6 cafe.txtwc -m cafe.txt5 cafe.txt-c gaf 6 en -m gaf 5, omdat de ene é een byte extra innam. Engelse letters en cijfers nemen 1 byte in, letters met een accent zoals é 2 bytes, en Koreaanse tekens en ☕ 3 bytes, dus het aantal bytes verschilt ook bij hetzelfde aantal tekens.
De tabel zet het passende commando voor elke taak naast het getal dat in dit artikel is geteld.
| Taak | Commando | Gemeten in dit artikel |
|---|---|---|
| Alleen het aantal regels als getal krijgen | wc -l < access.log | 10Alleen het getal, zonder bestandsnaam |
| Regels tellen die aan een voorwaarde voldoen | grep ‘ 404 ‘ access.log | wc -l | 3Regels met een 404-antwoord |
| Verschillende waarden tellen | cut -d ‘ ‘ -f 1 access.log | sort -u | wc -l | 4Aantal verschillende IP's |
| Bestandsgrootte controleren | wc -c access.log | 766Aantal bytes |
| Aantal tekens in een bestand met Koreaans | wc -m menu.txt | 1838 als hetzelfde bestand met -c wordt geteld |
| Weergavebreedte van de langste regel | wc -L access.log | 8212 voor het menubestand, dat elk Koreaans teken als twee kolommen telt |
| Totaal aantal regels van meerdere bestanden | wc -l *.log | 13Totaal op de total-regel |
4️⃣ Totaal van meerdere bestanden met Linux wc
Geef je meerdere bestanden op, dan toont wc per bestand één regel en zet het op de laatste regel het totaal als total. Tel je het toegangslog en het foutlog samen, dan is de 13 op de total-regel de som van de regels van beide bestanden.
wc access.log error.log 10 100 766 access.log
3 11 76 error.log
13 111 842 totalOm logs met dezelfde extensie in één keer te tellen, gebruik je een jokerteken. De shell zet *.log om in bestandsnamen voordat ze worden doorgegeven, dus het resultaat is hetzelfde als wanneer je elke bestandsnaam afzonderlijk opgeeft.
wc -l *.log 10 access.log
3 error.log
13 totalOok bestanden met verschillende extensies tel je in één keer als je hun namen achter elkaar opgeeft. De twee logs en het menubestand samen gaven total 16.
wc -l access.log error.log menu.txt 10 access.log
3 error.log
3 menu.txt
16 total🔲 Simulator voor het wc-commando
In de simulator hieronder kun je zelf wc typen op de voorbeeldbestanden uit dit artikel. Met de chips probeer je -l, -m en tellen via een pipe uit, en als je een regel aan access.log toevoegt en opnieuw telt, zie je het hogere getal.
🔢 FAQ & aanbevolen content
Linux · Tekst
Linux sort-commando: bestanden sorteren
Opties en voorbeelden van sort om de inhoud van een bestand alfabetisch of oplopend en aflopend te sorteren.
Linux · Tekst
Linux uniq-commando
Zo gebruik je uniq om van dubbele regels er maar één over te houden en met -c te tellen hoe vaak ze voorkomen.
Linux · Tekst
Linux head-commando en tail-commando
Opties en gebruik van head, dat de eerste 10 regels van een bestand toont, en tail, dat de laatste 10 regels toont.
ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.