wc e tee
Esta aula aborda os comandos wc e tee no shell Linux/Bash. wc é usado para contar linhas, palavras, caracteres e bytes em arquivos ou entrada padrão, enquanto tee permite dividir a saída de um comando entre a tela e um arquivo. Inclui casos de uso práticos e exemplos detalhados.
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
findpara 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
wcpara 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
- GNU Coreutils: wc invocation
- GNU Coreutils: tee invocation
- man wc (die.net)
- man tee (die.net)
- Bash Reference Manual
Exercícios
- Quantas linhas tem o arquivo /etc/passwd? Use wc.
- Crie um arquivo chamado "dados.txt" com três linhas de texto. Use wc para contar palavras e bytes.
- Execute o comando
ls -le use tee para salvar a saída em "listagem.txt" e exibir na tela. - Conte quantas linhas do arquivo /etc/passwd contêm o padrão "bash" e salve essas linhas em "bash_users.txt" ao mesmo tempo.
- Use wc para encontrar a linha mais longa do arquivo /etc/passwd (em caracteres).
wc -l /etc/passwd
echo -e "linha um\nlinha dois\nlinha três" > dados.txt
wc -w dados.txt
wc -c dados.txt
ls -l | tee listagem.txt
grep "bash" /etc/passwd | tee bash_users.txt | wc -l
wc -L /etc/passwd