Salta al contenuto principale

wc: conta righe, parole e byte

Inviato da tuxsa il

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.txt

Il 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
15

Questa 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.txt

Con -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
5

La 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 totale

Con 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 *.txt

Esempio 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
248

Esempio 7: contare le corrispondenze di una ricerca

$ grep "ERROR" servizio.log | wc -l
7

Lo 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
3

Esempio 8: la riga più lunga con -L

$ wc -L lista.txt
6

L'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.txt

Il 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"
fi

Opzioni 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 -l conta 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
    1

    Il file ha due righe di testo, ma wc -l ne conta una.

  • Il nome del file compare solo se lo passi come argomento: wc -l file stampa anche il nome, mentre wc -l < file e cat file | wc -l stampano solo il numero.
  • Spazi iniziali su altri sistemi: su macOS e altri sistemi BSD il risultato di wc può avere spazi prima del numero. In uno script conviene usare la forma con < oppure eliminare gli spazi.
  • Byte e caratteri: con testi accentati -c e -m danno numeri diversi, e -m dipende dalle impostazioni di lingua del sistema.
  • Le directory: wc lavora sui file. Con il nome di una cartella segnala un errore e stampa zeri; per contarne il contenuto serve ls o find in pipe.
  • Parole: per wc una parola è una sequenza separata da spazi, quindi dell'altro è una parola sola, e un trattino isolato conta come una parola.

Riepilogo

ComandoCosa fa
wc fileRighe, parole e byte
wc -l fileSolo le righe
wc -l < fileSolo il numero di righe, senza nome
wc -w fileSolo le parole
wc -c fileSolo i byte
wc -m fileSolo i caratteri
wc -L fileLunghezza della riga più lunga
comando | wc -lConta le righe prodotte da un comando