wc conta quante righe, parole e byte contiene un file o un testo. È un comando piccolo, ma usatissimo: serve a sapere quanto è lungo un documento, a contare i file di una cartella, a verificare quante righe ha un risultato, soprattutto in coda ad altri comandi.
Cos'è
wc è l'abbreviazione di word count, "conteggio delle parole", anche se il suo uso più frequente è contare le righe. Fa parte del pacchetto GNU coreutils ed è un eseguibile (/usr/bin/wc), presente su qualsiasi distribuzione GNU/Linux.
Cosa fa
Legge uno o più file, o lo standard input, e stampa tre numeri nell'ordine: righe, parole e byte, seguiti dal nome del file. Una "parola" è per wc qualsiasi sequenza di caratteri separata da spazi, tabulazioni o a capo. Non modifica nulla.
Come si usa
Sintassi base:
$ wc [opzioni] [file...]Per gli esempi usiamo due file piccoli: numeri.txt (le righe da 1 a 15, create con seq 15 > numeri.txt) e lista.txt (le tre righe mele, pere, arance).
Esempio 1: i tre conteggi insieme
$ wc numeri.txt
15 15 36 numeri.txtIl file ha 15 righe, 15 parole e 36 byte.
Esempio 2: contare solo le righe con -l
$ wc -l numeri.txt
15 numeri.txtÈ l'opzione più usata in assoluto. Per ottenere solo il numero, senza il nome del file, fai leggere il file dallo standard input con <:
$ wc -l < numeri.txt
15Questa forma è comoda negli script, perché il risultato si può salvare direttamente in una variabile.
Esempio 3: contare parole e byte
$ wc -w lista.txt
3 lista.txt
$ wc -c lista.txt
17 lista.txtCon -w si contano le parole, con -c i byte. Per un file, il numero di byte coincide con la sua dimensione.
Esempio 4: byte o caratteri? -c e -m
Non tutti i caratteri occupano un solo byte: in UTF-8 le lettere accentate ne occupano due. Con -m si contano i caratteri:
$ echo -n "caffè" | wc -c
6
$ echo -n "caffè" | wc -m
5La parola ha 5 caratteri, ma la "è" occupa due byte, e quindi i byte sono 6. (L'opzione -n di echo evita di aggiungere un a capo finale, che altrimenti verrebbe contato.)
Esempio 5: più file e il totale
$ wc numeri.txt lista.txt
15 15 36 numeri.txt
3 3 17 lista.txt
18 18 53 totaleCon più file, wc stampa una riga per ciascuno e una riga finale con il totale. Con un carattere jolly puoi contare molti file in un colpo solo:
$ wc -l *.txtEsempio 6: contare gli elementi di una cartella
Con la pipe |, wc -l conta le righe prodotte da un altro comando. Visto che ls stampa un elemento per riga quando l'output non va a un terminale, il conteggio coincide con il numero di elementi:
$ ls | wc -l
12
$ ls -A | wc -l # include i file nascosti
15
$ find . -type f | wc -l # tutti i file, anche nelle sottocartelle
248Esempio 7: contare le corrispondenze di una ricerca
$ grep "ERROR" servizio.log | wc -l
7Lo stesso risultato si ottiene con grep -c, ma la forma con wc funziona con qualunque comando che stampi righe, per esempio per sapere quanti utenti sono collegati:
$ who | wc -l
3Esempio 8: la riga più lunga con -L
$ wc -L lista.txt
6L'opzione -L (maiuscola, disponibile nella versione GNU) mostra la lunghezza della riga più lunga. In lista.txt la riga più lunga è arance, con 6 caratteri.
Esempio 9: la lunghezza di un testo da pubblicare
Per chi scrive, wc -w è un contaparole rapido:
$ wc -w bozza.txt
842 bozza.txtIl conteggio è approssimativo, perché conta come parole anche simboli e numeri isolati, ma basta per farsi un'idea della lunghezza di un articolo.
Esempio 10: uso negli script
#!/bin/bash
N=$(find "$HOME/Documenti" -type f | wc -l)
echo "File nella cartella Documenti: $N"
RIGHE=$(wc -l < "$HOME/lista.txt")
if [ "$RIGHE" -gt 100 ]; then
echo "La lista ha più di 100 righe"
fiOpzioni utili
-l: conta le righe.-w: conta le parole.-c: conta i byte.-m: conta i caratteri.-L: lunghezza della riga più lunga.
Le opzioni si possono combinare: wc -lw file mostra righe e parole. L'ordine di stampa è comunque sempre lo stesso: righe, parole, caratteri, byte, lunghezza massima.
Attenzione a
Le righe sono gli "a capo":
wc -lconta i caratteri di fine riga. Se l'ultima riga di un file non termina con un a capo, non viene contata:$ printf "uno\ndue" | wc -l 1Il file ha due righe di testo, ma
wc -lne conta una.- Il nome del file compare solo se lo passi come argomento:
wc -l filestampa anche il nome, mentrewc -l < fileecat file | wc -lstampano solo il numero. - Spazi iniziali su altri sistemi: su macOS e altri sistemi BSD il risultato di
wcpuò avere spazi prima del numero. In uno script conviene usare la forma con<oppure eliminare gli spazi. - Byte e caratteri: con testi accentati
-ce-mdanno numeri diversi, e-mdipende dalle impostazioni di lingua del sistema. - Le directory:
wclavora sui file. Con il nome di una cartella segnala un errore e stampa zeri; per contarne il contenuto servelsofindin pipe. - Parole: per
wcuna parola è una sequenza separata da spazi, quindidell'altroè una parola sola, e un trattino isolato conta come una parola.
Riepilogo
| Comando | Cosa fa |
|---|---|
wc file | Righe, parole e byte |
wc -l file | Solo le righe |
wc -l < file | Solo il numero di righe, senza nome |
wc -w file | Solo le parole |
wc -c file | Solo i byte |
wc -m file | Solo i caratteri |
wc -L file | Lunghezza della riga più lunga |
comando | wc -l | Conta le righe prodotte da un comando |