Nesta aula, você aprenderá dois comandos essenciais do shell: wc e tee. O comando wc (word count) é uma ferramenta versátil para contar linhas, palavras, caracteres e bytes em arquivos ou na entrada padrão. Já o tee é usado para redirecionar a saída de um comando simultaneamente para a tela e para um ou mais arquivos, funcionando como um 'divisor' de fluxo. Dominar esses comandos é fundamental para processamento de texto, depuração de scripts e automação de tarefas.

Contagem (linhas, palavras, bytes)

O comando wc (abreviação de 'word count') é uma ferramenta de linha de comando que conta o número de linhas, palavras, caracteres e bytes em arquivos ou na entrada padrão. Sua sintaxe básica é: wc [opções] [arquivo...]. Se nenhum arquivo for fornecido, ele lê da entrada padrão (stdin).

As opções mais comuns são:

  • -l: conta apenas o número de linhas.
  • -w: conta apenas o número de palavras.
  • -c: conta apenas o número de bytes.
  • -m: conta apenas o número de caracteres (diferente de bytes para caracteres multi-byte).
  • -L: exibe o comprimento da linha mais longa.

Sem opções, wc exibe as quatro contagens (linhas, palavras, caracteres/bytes, dependendo da implementação). No Linux, o padrão é exibir linhas, palavras e bytes. Exemplo:

$ echo -e "linha1\nlinha2\nlinha3" > arquivo.txt
$ wc arquivo.txt
 3  3 21 arquivo.txt

Isso indica 3 linhas, 3 palavras (cada linha é uma palavra) e 21 bytes (incluindo quebras de linha).

tee (dividir saída)

O comando tee lê da entrada padrão e escreve simultaneamente na saída padrão e em um ou mais arquivos. Seu nome vem do conceito de um 'T' em encanamento, que divide o fluxo. Sintaxe: comando | tee [opções] arquivo1 [arquivo2 ...]. Por padrão, tee sobrescreve o arquivo; use -a para anexar.

Exemplo básico:

$ echo "Olá, mundo" | tee saida.txt
Olá, mundo
$ cat saida.txt
Olá, mundo

O comando tee é útil quando você quer visualizar a saída de um comando e ao mesmo tempo salvá-la em um arquivo para análise posterior. Também pode ser usado em pipelines complexos para depuração.

Casos de uso

wc:

  • Contar linhas de um arquivo de log: wc -l /var/log/syslog
  • Contar palavras em um texto: wc -w documento.txt
  • Verificar o tamanho de um arquivo em bytes: wc -c arquivo.bin
  • Combinar com find para contar total de linhas em vários arquivos: find . -name "*.txt" -exec wc -l {} +

tee:

  • Salvar a saída de um comando longo enquanto ainda vê na tela: make | tee build.log
  • Dividir a saída para múltiplos arquivos: comando | tee arquivo1 arquivo2
  • Usar em scripts para logging: comando | tee -a /var/log/meu_script.log
  • Combinar com wc para contar e salvar: cat arquivo.txt | tee contagem.txt | wc -l

Exemplos

Exemplo 1: Contar linhas de um arquivo e salvar resultado

$ wc -l /etc/passwd | tee numero_linhas.txt
44 /etc/passwd
$ cat numero_linhas.txt
44 /etc/passwd

Exemplo 2: Usar tee em um pipeline com grep e wc

$ grep "ERROR" /var/log/syslog | tee erros.log | wc -l
15

Isso conta quantas linhas contêm "ERROR", salva essas linhas em erros.log e exibe o total na tela.

Exemplo 3: Contar palavras em múltiplos arquivos

$ wc -w *.txt
 120 arquivo1.txt
 340 arquivo2.txt
 460 total

Exemplo 4: Usar tee para anexar a um log

$ echo "Nova entrada" | tee -a log.txt
Nova entrada
$ cat log.txt
Nova entrada

Boas práticas

Combine wc com grep, sort, uniq para análises mais poderosas. Use tee em scripts para criar logs sem interromper o fluxo de dados. Lembre-se de que wc conta bytes, não caracteres, a menos que use -m; para textos com acentos, prefira -m. Evite usar tee com arquivos muito grandes se não precisar, pois pode consumir espaço em disco.

Referências

Exercícios

  1. Quantas linhas tem o arquivo /etc/passwd? Use wc.
  2. ✓ Resposta:
    wc -l /etc/passwd
  3. Crie um arquivo chamado "dados.txt" com três linhas de texto. Use wc para contar palavras e bytes.
  4. ✓ Resposta:
    echo -e "linha um\nlinha dois\nlinha três" > dados.txt
    wc -w dados.txt
    wc -c dados.txt
  5. Execute o comando ls -l e use tee para salvar a saída em "listagem.txt" e exibir na tela.
  6. ✓ Resposta:
    ls -l | tee listagem.txt
  7. Conte quantas linhas do arquivo /etc/passwd contêm o padrão "bash" e salve essas linhas em "bash_users.txt" ao mesmo tempo.
  8. ✓ Resposta:
    grep "bash" /etc/passwd | tee bash_users.txt | wc -l
  9. Use wc para encontrar a linha mais longa do arquivo /etc/passwd (em caracteres).
  10. ✓ Resposta:
    wc -L /etc/passwd