Comando cut do Linux: Corte de Texto

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando cut no Linux para extrair e analisar dados de arquivos de texto. Vamos simular um cenário em que você trabalha em uma livraria local e precisa processar informações de clientes e livros. O comando cut ajudará você a extrair colunas ou campos específicos de seus arquivos de dados, permitindo um gerenciamento e análise de dados eficientes.

Pré-requisitos

Antes de iniciar este laboratório, certifique-se de que você possui:

  • Familiaridade básica com a linha de comando do Linux
  • Acesso a um terminal Linux (este laboratório assume que você está usando um terminal no diretório /home/labex/project)

Entendendo os Dados da Livraria

Vamos começar examinando os arquivos de dados da livraria. Temos dois arquivos: customers.txt e books.txt.

Primeiro, vamos visualizar o conteúdo do arquivo customers.txt:

cat /home/labex/project/customers.txt

Você deverá ver uma saída semelhante a esta:

ID,Name,Age,Email
1,John Doe,25,john.doe@email.com
2,Jane Smith,35,jane.smith@email.com
3,Lily Chen,30,lily.chen@email.com
4,Andy Brown,22,andy.brown@email.com

Agora, vamos olhar para o arquivo books.txt:

cat /home/labex/project/books.txt

A saída deve ser parecida com:

ISBN,Title,Author,Price
978-1234567890,The Great Adventure,Alice Writer,19.99
978-2345678901,Mystery in the Woods,Bob Author,24.99
978-3456789012,Cooking Basics,Carol Chef,15.99
978-4567890123,Science Explained,David Scientist,29.99

Esses arquivos contêm valores separados por vírgula (CSV) com campos diferentes para clientes e livros.

Se você não vir a saída esperada ou encontrar um erro, verifique o seguinte:

  • Certifique-se de que você está no diretório correto (/home/labex/project)
  • Verifique se os arquivos existem executando ls -l
  • Se os arquivos estiverem faltando, talvez seja necessário criá-los manualmente ou entrar em contato com o administrador do laboratório

Extraindo Nomes de Clientes

Agora que vimos nossos dados, vamos usar o comando cut para extrair informações específicas. Começaremos extraindo os nomes dos clientes do arquivo customers.txt.

O comando cut usa a opção -d para especificar um delimitador (no nosso caso, uma vírgula) e a opção -f para selecionar qual campo (ou campos) exibir.

Execute o seguinte comando:

cut -d ',' -f 2 /home/labex/project/customers.txt

Vamos detalhar este comando:

  • cut: O nome do comando que estamos usando
  • -d ',': Especifica que estamos usando uma vírgula como delimitador entre os campos
  • -f 2: Diz ao cut para extrair o segundo campo
  • /home/labex/project/customers.txt: O caminho para o nosso arquivo de entrada

Você deverá ver uma saída como esta:

Name
John Doe
Jane Smith
Lily Chen
Andy Brown

Observe que o cabeçalho "Name" também está incluído. Isso ocorre porque o cut trata a linha de cabeçalho exatamente como qualquer outra linha no arquivo.

Se você quiser excluir o cabeçalho, pode usar o comando tail em combinação com o cut:

cut -d ',' -f 2 /home/labex/project/customers.txt | tail -n +2

Este pipeline faz duas coisas:

  1. cut extrai o segundo campo (nomes) de cada linha
  2. tail -n +2 exibe a saída a partir da segunda linha, efetivamente pulando o cabeçalho

A saída agora deve ser:

John Doe
Jane Smith
Lily Chen
Andy Brown

Se você não estiver vendo a saída esperada:

  • Verifique se você digitou o comando exatamente como mostrado
  • Certifique-se de que o arquivo customers.txt não foi modificado
  • Tente executar cat /home/labex/project/customers.txt novamente para verificar o conteúdo do arquivo

Extraindo Múltiplos Campos

Frequentemente, precisamos extrair vários campos dos nossos dados. Vamos extrair tanto os nomes quanto as idades dos clientes do arquivo customers.txt.

Use o seguinte comando:

cut -d ',' -f 2,3 /home/labex/project/customers.txt

Este comando é semelhante ao anterior, mas agora estamos especificando dois campos na opção -f:

  • -f 2,3: Extrai o segundo e o terceiro campos (nome e idade)

Sua saída deve ser assim:

Name,Age
John Doe,25
Jane Smith,35
Lily Chen,30
Andy Brown,22

Como você pode ver, podemos especificar vários campos separando-os por vírgulas na opção -f. A saída mantém o delimitador original (vírgula) entre os campos extraídos.

Se sua saída não corresponder:

  • Certifique-se de ter incluído a vírgula entre 2 e 3 na opção -f
  • Verifique se o arquivo customers.txt não foi alterado
  • Tente executar o comando sem a opção -d ',' para ver se o arquivo usa um delimitador diferente

Extraindo um Intervalo de Campos

O comando cut também nos permite extrair um intervalo de campos. Vamos extrair todos os campos desde o ID do cliente até a idade (campos 1 a 3) do arquivo customers.txt.

Use este comando:

cut -d ',' -f 1-3 /home/labex/project/customers.txt

Aqui está o que há de novo neste comando:

  • -f 1-3: Isso especifica um intervalo de campos de 1 a 3, inclusive

Sua saída deve ser semelhante a:

ID,Name,Age
1,John Doe,25
2,Jane Smith,35
3,Lily Chen,30
4,Andy Brown,22

Este comando extrai um intervalo de campos de 1 a 3. Você também pode combinar intervalos e campos individuais, como -f 1-3,5 para extrair os campos 1, 2, 3 e 5.

Se você não estiver vendo a saída esperada:

  • Verifique se você usou um hífen (-) entre 1 e 3 na opção -f
  • Certifique-se de que o arquivo customers.txt não foi modificado
  • Tente extrair cada campo individualmente (por exemplo, -f 1, -f 2, -f 3) para verificar se todos os campos estão presentes no arquivo

Trabalhando com Campos de Largura Fixa

Às vezes, os dados não são separados por delimitadores, mas sim organizados em colunas de largura fixa. O comando cut também pode lidar com isso, usando a opção -c para especificar posições de caracteres.

Vamos criar um novo arquivo com dados de largura fixa:

cat << EOF > /home/labex/project/inventory.txt
ISBN     Title          Quantity
1234567890The Great Adv      100
2345678901Mystery in th       75
3456789012Cooking Basi       50
4567890123Science Exp        125
EOF

Este comando usa um here-document (<<EOF) para criar um novo arquivo chamado inventory.txt com dados de largura fixa.

Agora, vamos extrair apenas os títulos dos livros usando posições de caracteres:

cut -c 11-25 /home/labex/project/inventory.txt

Aqui está o que há de novo:

  • -c 11-25: Isso diz ao cut para extrair os caracteres de 11 a 25 de cada linha

Você deverá ver:

itle          Q
The Great Adv
Mystery in th
Cooking Basi
Science Exp

Este comando extrai os caracteres de 11 a 25 de cada linha, o que corresponde ao campo de título em nossos dados de largura fixa.

Se você não estiver obtendo a saída esperada:

  • Certifique-se de que o arquivo inventory.txt foi criado corretamente (você pode verificar com cat /home/labex/project/inventory.txt)
  • Verifique se você usou o intervalo de caracteres correto (11-25)
  • Tente ajustar o intervalo de caracteres se os títulos parecerem desalinhados

Combinando cut com Outros Comandos

O comando cut torna-se ainda mais poderoso quando combinado com outros comandos do Linux. Vamos usar o cut junto com o grep para encontrar todos os livros com preço acima de $20 e exibir seus títulos.

Execute este comando:

grep -E ',[2-9][0-9]\.[0-9]{2}$' /home/labex/project/books.txt | cut -d ',' -f 2

Este pipeline de comando faz duas coisas:

  1. grep -E ',[2-9][0-9]\.[0-9]{2}$': Isso usa uma expressão regular para encontrar linhas onde o preço é $20 ou mais
    • ,[2-9][0-9]\.[0-9]{2}$: Corresponde a uma vírgula, seguida por um número de 20 a 99, um ponto decimal e mais dois dígitos no final da linha
  2. cut -d ',' -f 2: Isso extrai apenas o título do livro (segundo campo) das linhas que o grep encontrou

Você deverá ver uma saída semelhante a:

Mystery in the Woods
Science Explained

Se você não estiver vendo a saída esperada:

  • Verifique se o arquivo books.txt contém os dados corretos
  • Verifique se você inseriu a expressão regular do grep corretamente
  • Tente executar o comando grep sozinho para ver quais linhas ele está selecionando
  • Certifique-se de que o comando cut está especificando corretamente o segundo campo

Resumo

Neste laboratório, você aprendeu como usar o comando cut no Linux para extrair dados específicos de arquivos de texto. Você praticou:

  • Extração de campos únicos de arquivos CSV
  • Extração de múltiplos campos e intervalos de campos
  • Trabalho com dados de largura fixa
  • Combinação do cut com outros comandos como o grep

Essas habilidades são inestimáveis para o processamento e análise de dados em vários cenários, desde o gerenciamento de estoque de uma livraria até o tratamento de qualquer tipo de dado de texto estruturado.

Parâmetros adicionais do comando cut não abordados neste laboratório:

  • -s: Suprime linhas que não contêm delimitadores
  • --output-delimiter=STRING: Usa STRING como o delimitador de saída
  • --complement: Complementa o conjunto de bytes, caracteres ou campos selecionados

Para aprofundar seu aprendizado, tente experimentar esses parâmetros adicionais e crie seus próprios arquivos de dados para praticar. Lembre-se, o comando man cut fornece um manual abrangente para o comando cut caso precise de mais informações.