Comando cut do Linux: Recorte de Texto

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a utilizar o comando cut no Linux para extrair e analisar dados de arquivos de texto. Vamos simular um cenário onde 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 uma gestão e análise de dados mais eficiente.

Pré-requisitos

Antes de iniciar este laboratório, certifique-se de ter:

  • 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)
Este é um Laboratório Guiado, que fornece instruções passo a passo para ajudar você a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 93%. Ele recebeu uma taxa de avaliação positiva de 99% dos alunos.

Compreendendo 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 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 diferentes campos para clientes e livros.

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

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

Extraindo Nomes de Clientes

Agora que conhecemos 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 utiliza 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 utilizando
  • -d ',': Especifica que estamos usando a 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 foi incluído. Isso ocorre porque o cut trata a linha de cabeçalho como qualquer outra linha do arquivo.

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

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

Este pipeline faz duas coisas:

  1. O cut extrai o segundo campo (nomes) de cada linha
  2. O tail -n +2 exibe a saída a partir da segunda linha, pulando efetivamente 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 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 de 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 múltiplos 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 a sua saída não corresponder:

  • Certifique-se de ter incluído a vírgula entre o 2 e o 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 utiliza 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á a novidade neste comando:

  • -f 1-3: Isso especifica um intervalo de campos do 1 ao 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 usou um hífen (-) entre o 1 e o 3 na opção -f
  • Certifique-se de que o arquivo customers.txt não foi modificado
  • Tente extrair cada campo individualmente (ex: -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 organizados em colunas de largura fixa. O comando cut também pode lidar com isso, usando a opção -c para especificar as posições dos 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 as posições dos caracteres:

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

Aqui está a novidade:

  • -c 11-25: Isso diz ao cut para extrair os caracteres da posição 11 até 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 do 11º ao 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 usou o intervalo de caracteres correto (11-25)
  • Tente ajustar o intervalo de caracteres se os títulos parecerem desalinhados

Combinando o 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 superior a $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 comandos faz duas coisas:

  1. grep -E ',[2-9][0-9]\.[0-9]{2}$': Utiliza 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: 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
  • Confira se digitou 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 a 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 valiosas para o processamento e análise de dados em diversos cenários, desde a gestão de estoque de uma livraria até o manuseio 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 com esses parâmetros adicionais e crie seus próprios arquivos de dados para praticar. Lembre-se de que o comando man cut fornece um manual completo para o comando cut caso precise de mais informações.

Recursos