Guia de Uso do Comando cut no Linux

Comando Cut

O comando cut no Linux é uma ferramenta poderosa de processamento de texto usada para extrair seções específicas de cada linha de um arquivo ou de entrada canalizada. Ele não altera o arquivo original, mas simplesmente lê o conteúdo e exibe as partes desejadas na saída padrão. Neste artigo, vamos explorar o propósito do comando cut no Linux e demonstrar como usá-lo por meio de exemplos práticos do mundo real.

Compreendendo o Comando cut

O comando cut é uma ferramenta valiosa para quem trabalha com texto estruturado, permitindo a manipulação e extração de dados de forma eficiente em sistemas semelhantes ao Unix. Ele extrai partes de uma linha com base em posições de bytes, posições de caracteres, delimitadores ou campos. Isso o torna especialmente útil para filtrar e organizar dados em scripts de shell e operações de linha de comando. Também é útil para tarefas como recuperar colunas de arquivos CSV, recortar caracteres ou analisar arquivos de log. Embora seja comumente usado com arquivos, o comando cut também pode processar a saída de outros comandos quando usado em um pipeline.

Sintaxe Básica do Comando cut

O comando cut tem uma sintaxe muito simples que usa opções e um nome de arquivo. Aqui está como funciona:

cut[OPÇÕES][ARQUIVO]

Aqui, as OPÇÕES permitem controlar como o comando cut funciona. Você pode escolher um separador de campo (como uma vírgula), selecionar certos campos, definir intervalos de campos, ignorar linhas sem o separador, etc. ARQUIVO é o arquivo-alvo de onde você deseja extrair dados. O comando cut irá ler da entrada padrão se você não especificar um arquivo. Além disso, você pode especificar múltiplos arquivos; nesse caso, o comando cut os tratará como um, combinando seus conteúdos antes de processá-los.

Opções Comuns Usadas

O comando cut permite extrair partes específicas de texto de um arquivo ou entrada. Você pode informar o que extrair usando diferentes opções, como bytes, caracteres ou campos, e definindo um separador específico (delimitador). Aqui estão as opções comuns:

  • -f ou –fields=LISTA: Seleciona campos específicos com base em um delimitador escolhido.
  • -b ou –bytes=LISTA: Extrai certos bytes de cada linha.
  • -c ou –characters=LISTA: Retira caracteres específicos de cada linha.
  • -d ou –delimiter: Define um delimitador personalizado em vez do padrão, que é a tabulação.
  • –complement: Mostra tudo exceto os campos, bytes ou caracteres selecionados.
  • -s ou –only-delimited: Ignora linhas que não têm o delimitador. Por padrão, tais linhas são incluídas.
  • –output-delimiter: Permite escolher um delimitador diferente para a saída. Por padrão, o cut usa o mesmo delimitador que a entrada.

As opções -f, -b e -c usam uma LISTA para definir o que extrair, como campos, bytes ou caracteres. Você pode especificar o seguinte:

  • Um único número como 2
  • Vários números separados por vírgulas, como 1,3,5
  • Um intervalo como 2-4 (significando extrair de 2 a 4)
  • N- para significar da posição N até o final
  • -M para significar do início até a posição M

Como o Comando cut Funciona no Linux

Vamos passar por alguns exemplos práticos para entender como o comando cut funciona no Linux. Para isso, primeiro crie um arquivo chamado “mte.csv” usando o comando echo:

echo -e "empID,empName,empDesig\n101,Anees,Author\n102,Asghar,Manager\n103,Damian,CEO"> mte.csv

Vamos verificar o conteúdo do arquivo usando o comando cat:

cat mte.csv

Mostrar Dados do Arquivo

Aqui, é importante notar que o comando cut não muda o arquivo, em vez disso, ele apenas mostra a saída selecionada com base no que você pede.

Extraindo Dados por Caracteres

Use a opção -c junto com o comando cut para extrair caracteres por posição:

cut -c1,8 mte.csv

Este comando extrai o primeiro e o oitavo caracteres de cada linha:

Para extrair caracteres entre posições específicas ou intervalos, podemos usar o comando cut da seguinte forma:

cut -c1-8 mte.csv

Este comando extrai os caracteres da primeira à oitava posição de cada linha:

Extraindo por Byte

Podemos usar a opção -b com o comando cut para extrair bytes específicos de cada linha:

cut -b1-3 mte.csv

Este comando extrai os primeiros três bytes de cada linha do arquivo chamado mte.csv:

Extraindo por Campo (Coluna)

Você pode extrair um campo inteiro de um arquivo usando o comando cut. Para isso, use -f com a opção -d, da seguinte forma:

cut -d',' -f2 mte.csv

Neste comando, -d',' define o delimitador como uma vírgula, e -f2 indica ao cut para extrair o segundo campo de cada linha no arquivo mte.csv:

Usando Delimitadores Personalizados no cut

O comando cut usa uma tabulação como delimitador, por padrão. No entanto, se seus campos são separados por algo que não seja uma tabulação, use -d para definir o correto. Por exemplo, podemos obter a quinta palavra de uma frase separada por espaços usando o delimitador -d, conforme segue:

echo "Hey! Geeks Welcome to Maketecheasier.com" | cut -d' ' -f5

Ignorando Certos Campos Durante a Extração

Você pode excluir campos específicos ao extrair texto de um arquivo usando a opção --complement com o comando cut. Esta opção instrui o comando cut a exibir todos os campos, exceto os especificados:

cut -d',' -f1 mte.csv --complement

Este comando ignorará a primeira coluna e retornará o restante do conteúdo:

Mudando o Delimitador Padrão na Saída

Por padrão, o comando cut preserva o delimitador de entrada na saída ao extrair campos. No entanto, você pode mudar o delimitador de saída usando a opção --output-delimiter ao trabalhar com extrações baseadas em campos:

cut -d',' -f1-3 --output-delimiter='-' mte.csv

Este comando usa o hífen - como separador na saída:

Usando cut com Outros Comandos Úteis do Linux

Você também pode usar cut com outros comandos do Linux usando o símbolo de pipeline. Por exemplo, o seguinte comando extrai os primeiros 5 caracteres de cada linha da saída do comando who:

who | cut -c1-5

No exemplo seguinte, usamos o comando cut junto com head para exibir as duas primeiras linhas do arquivo “mte.csv” e extrair apenas os campos empName e empDesig:

head -n2 mte.csv | cut -d',' -f2,3

Gerenciando Formatos de Dados Irregulares com o Comando cut do Linux

O comando cut funciona melhor quando os dados estão organizados de forma ordenada, com o mesmo delimitador (como uma vírgula ou tabulação) separando cada parte. Mas se o arquivo tiver espaços desiguais ou delimitadores mistos, o cut pode não funcionar bem por conta própria. Nesses casos, é útil primeiro limpar os dados usando comandos como tr ou sed para garantir que o cut consiga extrair as partes corretas.

Lidando com Espaços Extras

Considere um arquivo chamado “mteData.txt” onde os campos são separados por múltiplos espaços, como mostrado abaixo:

cat mteData.txt

Como o cut espera um único delimitador consistente, podemos simplificar o espaçamento usando tr antes de aplicar o cut:

cat mteData.txt | tr -s ' ' | cut -d' ' -f1-2

Este comando lê o conteúdo de “mteData.txt”, usa tr para substituir múltiplos espaços por um único espaço e, em seguida, usa cut para extrair os primeiros dois campos separados por espaço:

Lidando com Delimitadores Mistos

Se um arquivo usar uma combinação de espaços e vírgulas como delimitadores, podemos normalizar o formato usando sed. Por exemplo, um arquivo chamado “mteData1.txt” contém o seguinte conteúdo:

cat mteData1.txt

Vamos usar o comando sed junto com o comando cut para substituir todos os espaços por uma vírgula e em seguida extrair os primeiros e terceiros campos separados por vírgula:

sed 's/ /,/g' mteData1.txt | cut -d',' -f1,3

Conclusão

Neste artigo, exploramos o comando cut do Linux, uma ferramenta útil no Linux para extrair dados de arquivos ou entrada canalizada. Com sua sintaxe simples, você pode facilmente obter caracteres, bytes ou campos com base em um delimitador. Também demonstramos como usar o comando cut com outros comandos como tr, sed e head para gerenciar dados desorganizados e simplificar a saída. Seja você trabalhando com arquivos CSV, analisando logs ou limpando dados, o comando cut é uma ferramenta indispensável para processamento de texto em sistemas semelhantes ao Unix.