Comando wc: contar linhas e palavras e usar wc -l com pipes

Ambiente de testeFamília RHELAlmaLinux 9.8conta rootVerificado em 2026-10-29

O comando wc é um comando do Linux que conta e mostra o número de linhas, palavras e bytes de um arquivo. Se você contar com wc -l as linhas de um arquivo de exemplo com o log de acesso de um servidor web, o resultado é 10, e se filtrar só as respostas 404 com grep e passá-las para wc -l, você vê o número de requisições que falharam, 3, como um único número.

Os logs, o conteúdo dos arquivos e a pasta de trabalho /root/work abaixo são valores de exemplo. O log é um arquivo de dez linhas criado com endereços IP reservados para documentação, e os outros arquivos também foram todos criados para teste.

1️⃣ Uso básico do comando wc e como ler a saída

A forma básica do comando é wc, depois as opções e depois os arquivos. Se você passar só um arquivo, sem opções, ele mostra o número de linhas, de palavras e de bytes nessa ordem e coloca o nome do arquivo no final.

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

No resultado da contagem do log de acesso, 10 é o número de linhas, 100 o de palavras e 766 o de bytes.

Para ver só um número, acrescente uma das opções -l, -w ou -c.

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

Se você passar um arquivo que não existe, aparece uma mensagem de erro e o código de saída é 1.

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

2️⃣ Contar linhas com wc -l e pipes

Quando o nome do arquivo sai junto com o número de linhas, é preciso cortar o nome mais uma vez ao guardar o número em uma variável de script. Se você passar o arquivo por redirecionamento (<) ou por pipe, o wc não conhece o nome do arquivo e mostra só o número.

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

Colocando grep antes do pipe, você conta só as linhas que atendem a uma condição. A busca incluiu os espaços antes e depois do código de resposta 404, e três linhas continham 404.

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

Para contar quantos IPs se conectaram, recorte só o primeiro campo, remova as linhas repetidas com sort -u e depois conte. No log de dez linhas, havia quatro IPs diferentes.

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

O wc -l conta o número de caracteres de quebra de linha. Por isso, em um arquivo sem quebra de linha no fim da última linha, o wc -l mostra 1 mesmo que o cat mostre duas linhas.

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

Se o número de linhas vier uma a menos, verifique primeiro se a última linha termina com uma quebra de linha.

3️⃣ Opções do wc e contagem de caracteres com -c e -m

Em UTF-8, letras do inglês e dígitos ocupam 1 byte por caractere, enquanto caracteres coreanos (hangul) e ☕ ocupam 3 bytes cada. Por isso, em um arquivo só com texto em inglês, o número de bytes contado com -c e o de caracteres contado com -m são iguais, mas quando entra coreano os dois números ficam diferentes. A comparação usa um arquivo com duas linhas de nomes de cardápio em coreano e uma linha em inglês.

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

-c deu 38 e -m deu 18, uma diferença de 20. São os 2 bytes a mais que cada um dos nove caracteres coreanos e o ☕ ocupa, então em um arquivo com coreano é preciso contar com -m para bater com o número real de caracteres. A medição foi feita na localidade C.UTF-8 e, segundo o manual, -m conta nas unidades de caractere da localidade.

-L mostra a largura de exibição da linha mais longa. No log de acesso, a linha mais longa tinha 82 colunas; no arquivo de cardápio, cada caractere coreano e o ☕ ocupam duas colunas, por isso uma linha de 7 caracteres deu 12.

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

Letras latinas com acento ocupam 2 bytes por caractere em UTF-8. Isso foi medido à parte com um arquivo que contém só a linha café.

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

-c deu 6 e -m deu 5, porque o único é ocupou um byte a mais. Letras do inglês e dígitos ocupam 1 byte, letras acentuadas como é ocupam 2 bytes e caracteres coreanos e ☕ ocupam 3 bytes, então o número de bytes muda mesmo com o mesmo número de caracteres.

A tabela reúne o comando certo para cada tarefa e o número contado neste artigo.

TarefaComandoMedido neste artigo
Obter só o número de linhaswc -l < access.log10Só o número, sem o nome do arquivo
Contar as linhas que atendem a uma condiçãogrep ‘ 404 ‘ access.log | wc -l3Linhas com resposta 404
Contar valores diferentescut -d ‘ ‘ -f 1 access.log | sort -u | wc -l4Número de IPs diferentes
Verificar o tamanho do arquivowc -c access.log766Número de bytes
Número de caracteres de um arquivo com coreanowc -m menu.txt1838 ao contar o mesmo arquivo com -c
Largura de exibição da linha mais longawc -L access.log8212 no arquivo de cardápio, que conta cada caractere coreano como duas colunas
Total de linhas de vários arquivoswc -l *.log13Total na linha total

4️⃣ Total de vários arquivos com o wc do Linux

Se você passar vários arquivos, o wc mostra uma linha por arquivo e acrescenta o total na última linha como total. Ao contar juntos o log de acesso e o log de erros, o 13 da linha total é a soma das linhas dos dois arquivos.

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

Para contar de uma vez os logs com a mesma extensão, use um curinga. O shell troca *.log pelos nomes dos arquivos antes de passá-los, então o resultado é o mesmo que escrever cada nome de arquivo.

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

Arquivos com extensões diferentes também são contados de uma vez se você escrever os nomes em sequência. Os dois logs e o arquivo de cardápio contados juntos deram total 16.

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

🔲 Simulador do comando wc

No simulador abaixo, você pode digitar o wc nos arquivos de exemplo do artigo. Com os chips você testa -l, -m e a contagem por pipe, e se acrescentar uma linha ao access.log e contar de novo, aparece o número maior.

Simulador do comando wcwc / conta root
[root@server work]#
Use as teclas ↑↓ para chamar de volta os comandos digitados antes.

🔢 FAQ & conteúdo recomendado

Sim, quando você conta as linhas que atendem a uma condição em um único arquivo. No mesmo log de acesso, grep -c com a mesma condição também deu 3. O grep -c resolve com um só comando, sem pipe, e o wc -l é usado para contar a saída de outros comandos além do grep, como sort ou cut.

Ele conta como uma palavra cada bloco separado por espaços, tabulações ou quebras de linha. O resultado de [echo ‘log_level=warn timeout = 30’ | wc -w] é 4. log_level=warn, sem espaços, conta como uma palavra, e o = com espaços dos dois lados conta como outra palavra.

Selecione só os arquivos com find e passe-os para wc -l. Na pasta de exemplo, [find /root/work -type f | wc -l] mostrou 5. [ls | wc -l] também deu 5 na mesma pasta, mas o ls mostra também os nomes das subpastas como linhas e não conta os arquivos dentro delas.

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 10   +   7   =