Comando wc: contare righe e parole e usare wc -l con le pipe
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/workwc access.log 10 100 766 access.logNel 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.log10 access.logwc -w access.log100 access.logwc -c access.log766 access.logSe indichi un file che non esiste, compare un messaggio di errore e il codice di uscita è 1.
wc nosuch.txtwc: nosuch.txt: No such file or directoryecho $?12️⃣ 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.log10cat access.log | wc -l10Mettendo 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 -l3Per 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 -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 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.txtfirst line
last linewc -l no-newline.txt1 no-newline.txtSe 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아메리카노
카페 라테 ☕
teawc -c menu.txt38 menu.txtwc -m menu.txt18 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.log82 access.logwc -L menu.txt12 menu.txtLe 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.txtcaféwc -c cafe.txt6 cafe.txtwc -m cafe.txt5 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.
| Operazione | Comando | Misurato in questo articolo |
|---|---|---|
| Ottenere solo il numero di righe | wc -l < access.log | 10Solo il numero, senza il nome del file |
| Contare le righe che soddisfano una condizione | grep ‘ 404 ‘ access.log | wc -l | 3Righe con risposta 404 |
| Contare i valori diversi | cut -d ‘ ‘ -f 1 access.log | sort -u | wc -l | 4Numero di IP diversi |
| Controllare la dimensione del file | wc -c access.log | 766Numero di byte |
| Numero di caratteri di un file con del coreano | wc -m menu.txt | 1838 se si conta lo stesso file con -c |
| Larghezza di visualizzazione della riga più lunga | wc -L access.log | 8212 per il file del menu, che conta ogni carattere coreano come due colonne |
| Totale delle righe di più file | wc -l *.log | 13Totale 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 totalPer 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 totalAnche 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.
🔢 FAQ & contenuti consigliati
Linux · Testo
Comando sort di Linux: ordinare i file
Opzioni ed esempi di sort per ordinare il contenuto di un file in ordine alfabetico, crescente o decrescente.
Linux · Testo
Comando uniq di Linux
Come usare uniq per tenere una sola delle righe doppie e contare con -c quante volte si ripetono.
Linux · Testo
Comandi head e tail di Linux
Opzioni e uso di head, che mostra le prime 10 righe di un file, e di tail, che mostra le ultime 10.
ℹ️ 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.