Como usar o comando wc no Linux

0
17


fatmawati achmad zaenuri / Shutterstock.com

Contar o número de linhas, palavras e bytes em um arquivo é útil, mas a flexibilidade real do Linux wc O comando vem do trabalho com outros comandos. Vamos a ver.

Qual é o comando wc?

a wc command é um pequeno aplicativo. É um dos principais utilitários do Linux, por isso não é necessário instalá-lo. Você já estará no seu computador Linux.

Você pode descrever o que faz em poucas palavras. Conta as linhas, palavras e bytes em um arquivo ou seleção de arquivos e imprime o resultado em uma janela de terminal. Ele também pode receber sua entrada do fluxo STDIN, o que significa que o texto que você deseja processar pode ser canalizado para ele. este é o lugar onde wc realmente começa a agregar valor.

É um ótimo exemplo do mantra do Linux de “faça uma coisa e faça bem”. Por aceitar entrada canalizada, pode ser usado em feitiços de vários comandos. Como veremos, esse pequeno utilitário autônomo é na verdade um ótimo jogador de equipe.

uma maneira que eu uso wc é como um espaço reservado em um comando ou alias complicado que estou cozinhando. Se o comando terminado tiver o potencial de ser destrutivo e excluir arquivos, geralmente uso wc como um substituto para o comando real e perigoso.

Dessa forma, durante o desenvolvimento do comando, recebo um feedback visual de que cada arquivo está sendo processado conforme o esperado. Não há chance de algo ruim acontecer enquanto estou lutando com a sintaxe.

tão simples quanto wc Ou seja, ainda existem algumas pequenas peculiaridades das quais você precisa estar ciente.

Primeiros passos com banheiro

A maneira mais fácil de usar wc é passar o nome de um arquivo de texto na linha de comando.

wc lorem.txt

Usando wc com um arquivo com uma longa linha de texto

Isso faz com que wc para escanear o arquivo e contar as linhas, palavras e bytes, e gravá-los na janela do terminal.

Palavras são consideradas qualquer coisa limitada por espaços em branco. Se são palavras de uma linguagem real ou não, é irrelevante. Se um arquivo contiver apenas “frd g lkj”, ele ainda contará como três palavras.

Linhas são sequências de caracteres que terminam em um retorno de carro ou fim de arquivo. Não importa se a linha quebra no seu editor ou na janela do terminal, até wc encontra um retorno de carro ou fim de arquivo, ainda é a mesma linha.

Nosso primeiro exemplo encontrou uma linha em todo o arquivo. Aqui está o conteúdo do arquivo “lorem.txt”.

cat lorem.txt

O conteúdo do arquivo com uma linha longa.

Tudo isso conta como uma única linha porque não há retornos de carro. Compare isso com outro arquivo, “lorem2.txt”, e como wc o interpreta.

wc lorem2.txt
cat lorem2.txt

Usando wc com um arquivo com muitas linhas

Desta vez, wc conta 15 linhas porque os retornos de carro foram inseridos no texto para iniciar uma nova linha em pontos específicos. No entanto, se você contar as linhas com texto, verá que existem apenas 12.

As outras três linhas são linhas em branco no final do arquivo. Estes contêm apenas retornos de carro. Embora não haja texto nestas linhas, uma nova linha foi iniciada e assim wc conte-os como tal.

Podemos passar tantos arquivos para wc como nós gostamos

wc lorem.txt lorem2.txt

Usando wc com dois arquivos

Obtemos estatísticas para cada arquivo individual e um total para todos os arquivos.

Também podemos usar curingas para selecionar arquivos correspondentes em vez de arquivos com nomes explícitos.

wc *.txt *.?

Usando wc com curingas

opções de linha de comando

Por padrão, wc irá mostrar as linhas, palavras e bytes em cada arquivo. É o mesmo que usar o -l (linhas) -w (palavras) e -c (bytes) opções.

wc lorem.txt
wc -l -w -c lorem.txt

Usando wc com as opções de linhas, palavras e bytes

Podemos especificar qual combinação de figuras queremos ver.

wc -l lorem.txt

wc -w lorem.txt

wc -c lorem.txt

wc -l -c lorem.txt

Usando wc com combinações de opções

Atenção especial deve ser dada ao último número, gerado pelo -c (bytes) opção. Muitas pessoas confundem isso com contagem de caracteres. realmente conta bytes. O número de caracteres e o número de bytes podem ser os mesmos. Mas não sempre.

Vejamos o conteúdo de um arquivo chamado “unicode.txt”.

cat unicode.txt

O conteúdo de um arquivo que contém um caractere não latino

Tem três palavras e um caractere do alfabeto não latino. nós vamos deixar wc processar o arquivo com suas configurações padrão bytese vamos fazê-lo novamente, mas solicite personagens com ele -m (caracteres) opção.

wc unicode.txt
wc -l -w -m unicode.txt

Contando os bytes em um arquivo e depois contando os caracteres no mesmo arquivo

Existem mais bytes do que caracteres.

Vamos dar uma olhada no dump hexadecimal do arquivo e ver o que está acontecendo. a hexdump de comando -C A opção (canônica) exibe os bytes do arquivo em linhas de 16, com seu equivalente ASCII simples (se houver) no final da linha. Se não houver nenhum caractere ASCII correspondente, um ponto “.“Mostrado em vez disso.

hexdump -C unicode.txt

Um dump hexadecimal de um arquivo curto com um caractere não latino

Em ASCII, um valor hexadecimal de 0x20 representa um caractere de espaço. Se contarmos três valores da esquerda, veremos que o próximo valor é um caractere de espaço. Então os três primeiros valores 0x62, 0x6fS 0x79 representam as letras em “menino”.

pulando nele 0x20vemos outro conjunto de três valores hexadecimais: 0x63, 0x61S 0x74. Estes soletram “gato”. Saltando sobre o próximo caractere de espaço, vemos mais três valores para as letras em “cachorro”. Estes são 0x64, 0x5fS 0x67.

Logo atrás da palavra “cachorro” podemos ver um caractere de espaço 0x20e mais cinco valores hexadecimais. Os dois últimos são retornos de carro, 0x0a.

Os outros três bytes representam o caractere não latino, que marcamos em verde. É um caractere Unicode e três bytes são necessários para codificá-lo. Estes são 0xe1, 0xafS 0x8a.

Portanto, certifique-se de saber o que está contando e que bytes e caracteres não precisam ser os mesmos. Em geral, contar bytes é mais útil porque informa o que é realmente no interior o arquivo. Contar por caracteres dá-lhe o número de coisas representado para o conteúdo do arquivo.

RELACIONADO: O que são codificações de caracteres como ANSI e Unicode e como elas são diferentes?

Pegar nomes de arquivos de um arquivo

Existe outra maneira de fornecer nomes de arquivos para wc . Você pode colocar os nomes dos arquivos em um arquivo e passar o nome de este arquivo para wc. Ele abre o arquivo, extrai os nomes dos arquivos e os processa como se fossem passados ​​na linha de comando. Isso permite que você armazene uma coleção arbitrária de nomes de arquivos para reutilização.

Mas há um problema, e é grande. Os nomes dos arquivos devem ser nulo terminado, não devolução do carro finalizado. Ou seja, após cada nome de arquivo deve haver um byte nulo de 0x00 em vez do byte de retorno de carro usual 0x0a.

Você não pode abrir um editor e criar um arquivo neste formato. Arquivos como esse geralmente são gerados por outros programas. Mas, se você tiver esse arquivo, é assim que você o usaria.

Aqui está nosso arquivo contendo os nomes dos arquivos. abrindo-o em less mostra o estranho^@“Personagens que less usado para indicar bytes nulos.

less source-files-list.txt

Um arquivo em menos de contém bytes nulos

Para usar o arquivo com wcTemos que usar --files0-from (ler entrada de) e passe o nome do arquivo contendo os nomes dos arquivos.

wc ---files0-from=source-files-list.txt

wc processando arquivo de nomes de arquivos terminados nulos

Os arquivos são processados ​​exatamente como se fossem fornecidos na linha de comando.

Entrada da tubulação para o banheiro

Uma maneira muito mais comum, flexível e produtiva de enviar informações para wc é canalizar a saída de outros comandos para wc . Podemos provar isso com o echo domínio.

echo "Count this for me" | wc
echo -e "Count thisnfor me" | wc

Usando echo para enviar entrada para wc

O segundo echo O comando usa o -e (caracteres de escape) para permitir sequências de escape como “n”Novo código de formato de linha. Isso injeta uma nova linha, causando wc para ver a entrada como duas linhas.

Aqui está uma cascata de comandos que alimentam sua entrada de um para outro.

find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq
  • achar procure por arquivos (type -f) recursivamente, começando no diretório atual. rev nomes de arquivos reversos.
  • Corte extraia o primeiro campo (-f1) definindo o delimitador de campo como um ponto “.E lendo da “frente” do nome do arquivo invertido até o primeiro ponto que encontrar. Agora extraímos a extensão do arquivo.
  • Rev reverte o primeiro campo buscado.
  • separar classifica-os em ordem alfabética crescente.
  • único lista as entradas exclusivas para a janela do terminal.

A lista de extensões exclusivas na árvore de diretórios atual

Este comando lista todas as extensões de arquivo exclusivas no diretório atual e quaisquer subdiretórios.

Se adicionarmos o -c (contagem) opção para o uniq comando contaria o ocorrências de cada tipo de extensão. Mas se quisermos saber quantas extensões de arquivo diferentes e exclusivas existem, podemos descartar wc como o último comando na linha e use o -l opção (linhas).

find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq | wc -l

Adicione wc para contar extensões únicas

RELACIONADO: Como usar o comando de corte do Linux

E finalmente

Aqui está um último truque wc pode fazer por você. Ele lhe dirá o comprimento da linha mais longa em um arquivo. Infelizmente, não diz qual é a linha. Apenas lhe dá o comprimento.

wc -L taf.c

Obtenha o comprimento da linha mais longa em um arquivo com wc

Tenha cuidado, porém, as guias são contadas como oito espaços. Visto no meu editor, há três guias de dois espaços no início dessa linha. Seu comprimento real é de 124 caracteres. Portanto, o número relatado é expandido artificialmente.

Eu trataria esse recurso com uma grande pitada de sal. E com isso quero dizer não usá-lo. Sua saída é enganosa.

Apesar de suas peculiaridades, wc é uma ótima ferramenta para inserir comandos canalizados quando você precisa contar todos os tipos de valores, não apenas as palavras em um arquivo.

RELACIONADO: 37 comandos importantes do Linux que você deve conhecer