Comando wc: contare righe e parole e usare wc -l con le pipe

Ambiente di testFamiglia RHELAlmaLinux 9.8account rootVerificato il 2026-10-29

Il comando wc è un comando Linux che conta e mostra il numero di righe, parole e byte di un file. Se conti con wc -l le righe di un file di esempio con il log degli accessi di un server web ottieni 10, e se con grep filtri solo le risposte 404 e le passi a wc -l, vedi il numero di richieste fallite, 3, come un unico numero.

I log, il contenuto dei file e la cartella di lavoro /root/work qui sotto sono valori di esempio. Il log è un file di dieci righe creato con indirizzi IP riservati alla documentazione, e anche gli altri file sono stati tutti creati per i test.

1️⃣ Uso di base del comando wc e lettura dell'output

La forma di base del comando è wc, poi le opzioni, poi i file. Se indichi solo un file senza opzioni, mostra nell'ordine il numero di righe, di parole e di byte e aggiunge il nome del file alla fine.

cd /root/work
wc access.log
 10 100 766 access.log

Nel risultato del conteggio del log degli accessi, 10 è il numero di righe, 100 quello di parole e 766 quello di byte.

Per vedere un solo numero, aggiungi una delle opzioni -l, -w o -c.

wc -l access.log
10 access.log
wc -w access.log
100 access.log
wc -c access.log
766 access.log

Se indichi un file che non esiste, compare un messaggio di errore e il codice di uscita è 1.

wc nosuch.txt
wc: nosuch.txt: No such file or directory
echo $?
1

2️⃣ Contare le righe con wc -l e le pipe

Quando insieme al numero di righe viene mostrato anche il nome del file, devi tagliare ancora una volta il nome per salvare il numero in una variabile di script. Se passi il file con un reindirizzamento (<) o una pipe, wc non conosce il nome del file e mostra solo il numero.

wc -l < access.log
10
cat access.log | wc -l
10

Mettendo grep prima della pipe puoi contare solo le righe che soddisfano una condizione. La ricerca includeva gli spazi prima e dopo il codice di risposta 404, e le righe che contenevano 404 erano tre.

grep ' 404 ' access.log | wc -l
3

Per contare quanti IP si sono collegati, taglia solo il primo campo, elimina le righe doppie con sort -u e poi conta. Nel log di dieci righe c'erano quattro IP diversi.

cut -d ' ' -f 1 access.log | sort -u
192.0.2.10
192.0.2.44
198.51.100.7
203.0.113.25
cut -d ' ' -f 1 access.log | sort -u | wc -l
4

wc -l conta il numero di caratteri di fine riga. Per questo, in un file senza fine riga alla fine dell'ultima riga, wc -l mostra 1 anche se cat mostra due righe.

cat no-newline.txt
first line
last line
wc -l no-newline.txt
1 no-newline.txt

Se il numero di righe risulta inferiore di uno, controlla prima che l'ultima riga termini con un fine riga.

3️⃣ Opzioni di wc e numero di caratteri con -c e -m

In UTF-8 le lettere inglesi e le cifre occupano 1 byte per carattere, mentre i caratteri coreani (hangul) e ☕ ne occupano 3 ciascuno. Per questo, in un file con solo testo inglese il numero di byte contato con -c e quello di caratteri contato con -m coincidono, ma quando c'è del coreano i due numeri diventano diversi. Il confronto usa un file con due righe di nomi di menu in coreano e una riga in inglese.

cat menu.txt
아메리카노
카페 라테 ☕
tea
wc -c menu.txt
38 menu.txt
wc -m menu.txt
18 menu.txt

-c ha dato 38 e -m 18, con una differenza di 20. Sono i 2 byte in più occupati da ciascuno dei nove caratteri coreani e da ☕, quindi in un file con del coreano devi contare con -m per ottenere il numero reale di caratteri. La misura è stata fatta con la localizzazione C.UTF-8 e, secondo il manuale, -m conta nelle unità di carattere della localizzazione.

-L mostra la larghezza di visualizzazione della riga più lunga. Nel log degli accessi la riga più lunga era di 82 colonne; nel file del menu ogni carattere coreano e ☕ occupa due colonne, quindi una riga di 7 caratteri ha dato 12.

wc -L access.log
82 access.log
wc -L menu.txt
12 menu.txt

Le lettere latine accentate occupano 2 byte per carattere in UTF-8. La misura è stata fatta a parte con un file che contiene solo la riga café.

cat cafe.txt
café
wc -c cafe.txt
6 cafe.txt
wc -m cafe.txt
5 cafe.txt

-c ha dato 6 e -m 5, perché l'unica é ha occupato un byte in più. Le lettere inglesi e le cifre occupano 1 byte, le lettere accentate come é 2 byte e i caratteri coreani e ☕ 3 byte, quindi il numero di byte cambia anche a parità di caratteri.

La tabella riunisce il comando adatto a ogni operazione e il numero contato in questo articolo.

OperazioneComandoMisurato in questo articolo
Ottenere solo il numero di righewc -l < access.log10Solo il numero, senza il nome del file
Contare le righe che soddisfano una condizionegrep ‘ 404 ‘ access.log | wc -l3Righe con risposta 404
Contare i valori diversicut -d ‘ ‘ -f 1 access.log | sort -u | wc -l4Numero di IP diversi
Controllare la dimensione del filewc -c access.log766Numero di byte
Numero di caratteri di un file con del coreanowc -m menu.txt1838 se si conta lo stesso file con -c
Larghezza di visualizzazione della riga più lungawc -L access.log8212 per il file del menu, che conta ogni carattere coreano come due colonne
Totale delle righe di più filewc -l *.log13Totale sulla riga total

4️⃣ Totale di più file con wc su Linux

Se indichi più file, wc mostra una riga per file e aggiunge il totale nell'ultima riga come total. Contando insieme il log degli accessi e il log degli errori, il 13 della riga total è la somma delle righe dei due file.

wc access.log error.log
 10 100 766 access.log
  3  11  76 error.log
 13 111 842 total

Per contare in una volta i log con la stessa estensione, usa un carattere jolly. La shell sostituisce *.log con i nomi dei file prima di passarli, quindi il risultato è lo stesso che scrivere ogni nome di file.

wc -l *.log
 10 access.log
  3 error.log
 13 total

Anche i file con estensioni diverse si contano in una volta se scrivi i loro nomi uno dopo l'altro. I due log e il file del menu contati insieme hanno dato total 16.

wc -l access.log error.log menu.txt
 10 access.log
  3 error.log
  3 menu.txt
 16 total

🔲 Simulatore del comando wc

Nel simulatore qui sotto puoi digitare tu stesso wc sui file di esempio dell'articolo. Con i chip puoi provare -l, -m e il conteggio con la pipe, e se aggiungi una riga ad access.log e conti di nuovo, compare il numero aumentato.

Simulatore del comando wcwc / account root
[root@server work]#
Con i tasti ↑↓ richiami i comandi digitati prima.

🔢 FAQ & contenuti consigliati

Sì, quando conti le righe che soddisfano una condizione in un solo file. Nello stesso log degli accessi anche grep -c con la stessa condizione ha dato 3. grep -c se la cava con un solo comando senza pipe, mentre wc -l si usa per contare l'output di altri comandi oltre a grep, come sort o cut.

Conta come una parola ogni blocco separato da spazi, tabulazioni o fine riga. Il risultato di [echo ‘log_level=warn timeout = 30’ | wc -w] è 4. log_level=warn, senza spazi, conta come una parola, e il = con spazi ai due lati conta come una parola a parte.

Scegli solo i file con find e passali a wc -l. Nella cartella di esempio, [find /root/work -type f | wc -l] ha mostrato 5. Anche [ls | wc -l] ha dato 5 nella stessa cartella, ma ls mostra come righe anche i nomi delle sottocartelle e non conta i file al loro interno.

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 9   +   7   =