Categories: Tecnologia

Como usar o comando de corte do Linux

fatmawati achmad zaenuri/Shutterstock.com

O comando Linux cutpermite extrair partes de texto de arquivos ou fluxos de dados. É especialmente útil para trabalhar com dados delimitados, como arquivos CSV . Aqui está o que você precisa saber.

O comando de corte

O cutcomando é um veterano do mundo Unix , fazendo sua estreia em 1982 como parte do AT&T System III UNIX. Seu objetivo na vida é cortar seções de texto de arquivos ou fluxos, de acordo com os critérios que você definir. Sua sintaxe é tão simples quanto seu propósito, mas é essa simplicidade conjunta que o torna tão útil.

À maneira tradicional do UNIX, combinando cutcom outros utilitários comogrep você pode criar soluções elegantes e poderosas para problemas desafiadores. Embora existam diferentes versões do cut, vamos discutir a versão GNU/Linux padrão. Esteja ciente de que outras versões, principalmente as cutencontradas nas variantes BSD , não incluem todas as opções descritas aqui.

Você pode verificar qual versão está instalada em seu computador emitindo este comando:

cortar --versão

Se você vir “GNU coreutils” na saída, você está na versão que descreveremos neste artigo. Todas as versões do cuttêm algumas dessas funcionalidades, mas a versão Linux teve melhorias adicionadas a ela.

Primeiros Passos Com corte

Quer estejamos canalizando informações ou cutusando para ler um arquivo , os comandos que usamos são os mesmos. Qualquer coisa que você possa fazer em um fluxo de entrada pode ser feito em uma linha de texto de um arquivo e  vice-versa . Podemos dizer para trabalhar com bytes, caracteres ou campos delimitados.cutcutcut

Para selecionar um único byte, usamos a -bopção (byte) e informamos cutqual byte ou bytes queremos. Neste caso, é o byte cinco. Estamos enviando a string “how-to geek” para o cutcomando com um pipe, “|”, de echo.

echo 'como fazer geek' | corte -b 5

O quinto byte nessa string é “t”, então cutresponde imprimindo “t” na janela do terminal.

Para especificar um  intervalo  , usamos um hífen. Para extrair os bytes 5 até—e incluindo—11, emitimos este comando:

echo 'como fazer geek' | corte -b 5-11

Você pode fornecer vários bytes ou intervalos individuais separando-os com vírgulas. Para extrair o byte 5 e o byte 11, use este comando:

echo 'como fazer geek' | corte -b 5,11

Para obter a primeira letra de cada palavra, podemos usar este comando:

echo 'como fazer geek' | corte -b 1,5,8

Se você usar o hífen sem um  primeiro  número, cutretornará tudo da posição 1 até o número. Se você usar o hífen sem um  segundo  número, cutretornará tudo, desde o primeiro número até o final do fluxo ou linha.

echo 'como fazer geek' | corte -b -6
echo 'como fazer geek' | corte -b 8-

Usando corte com caracteres

Usar cutcom caracteres é praticamente o mesmo que usá-lo com bytes. Em ambos os casos, cuidados especiais devem ser tomados com caracteres complexos. Ao usar a -copção (caractere), dizemos cutpara trabalhar em termos de caracteres, não de bytes.

echo 'como fazer geek' | corte -c 1,5,8
echo 'como fazer geek' | corte -c 8-11

Estes funcionam exatamente como você esperaria. Mas dê uma olhada neste exemplo. É uma palavra de seis letras, portanto, pedir cutpara retornar os caracteres de um a seis deve retornar a palavra inteira. Mas não. Falta um caractere. Para ver a palavra inteira temos que pedir os caracteres de um a sete.

echo 'piñata' | corte -c 1-6
echo 'piñata' | corte -c 1-7

O problema é que o caractere “ñ” é na verdade composto de dois bytes. Podemos ver isso com bastante facilidade. Temos um pequeno arquivo de texto contendo esta linha de texto:

cat unicode.txt

Vamos examinar esse arquivo com o hexdumputilitário. Usar a -Copção (canônica) nos dá uma tabela de dígitos hexadecimais com o equivalente ASCII à direita. Na tabela ASCII, o “ñ” não é mostrado, em vez disso, há pontos representando dois caracteres não imprimíveis. Esses são os bytes destacados na tabela hexadecimal .

hexdump -C unicode.txt

Esses dois bytes são usados ​​pelo programa de exibição – neste caso, o shell Bash – para identificar o “ñ”. Muitos caracteres Unicode usam três ou mais bytes para representar um único caractere.

Se pedirmos o caractere 3 ou o caractere 4, é mostrado o símbolo de um caractere não imprimível. Se pedirmos os bytes 3 e 4, o shell os interpreta como “ñ”.

echo 'piñata' | corte -c 3
echo 'piñata' | corte -c 4
echo 'piñata' | corte -c 3-4

Usando corte com dados delimitados

Podemos pedir cutpara dividir linhas de texto usando um delimitador especificado. Por padrão, cut usa um caractere de tabulação, mas é fácil dizer a ele para usar o que quisermos. Os campos no arquivo “/etc/passwd” são separados por dois pontos “:”, então usaremos isso como nosso delimitador e extrairemos algum texto.

As partes de texto entre os delimitadores são chamadas  de campos e são referenciadas como bytes ou caracteres, mas são precedidas pela -fopção (campos). Você pode deixar um espaço entre o “f” e o dígito, ou não.

O primeiro comando usa a -dopção (delimitador) para dizer ao corte para usar “:” como delimitador. Ele vai puxar o primeiro campo de cada linha no arquivo “/etc/passwd”. Essa será uma lista longa, então estamos usando heada -nopção (número) para mostrar apenas as cinco primeiras respostas. O segundo comando faz a mesma coisa, mas usa tailpara nos mostrar as últimas cinco respostas.

cut -d':' -f1 /etc/passwd | cabeça -n 5
cut -d':' -f2 /etc/passwd | cauda -n 5

Para extrair uma seleção de campos, liste-os como uma lista separada por vírgulas. Este comando extrairá os campos um a três, cinco e seis.

cut -d':' -f1-3,5,6 /etc/passwd | cauda -n 5

Ao incluir grepno comando, podemos procurar linhas que incluam “/bin/bash”. Isso significa que podemos listar apenas as entradas que têm o Bash como shell padrão. Geralmente, serão as contas de usuário “normais”. Pediremos campos de um a seis porque o sétimo campo é o campo shell padrão e já sabemos o que é — estamos procurando por ele.

grep "/bin/bash" /etc/passwd | corte -d':' -f1-6

Outra maneira de incluir todos os campos, exceto um, é usar a --complementopção. Isso inverte a seleção do campo e mostra tudo o que  não  foi solicitado. Vamos repetir o último comando, mas pedir apenas o campo sete. Em seguida, executaremos esse comando novamente com a --complementopção.

grep "/bin/bash" /etc/passwd | corte -d':' -f7
grep "/bin/bash" /etc/passwd | corte -d':' -f7 --complemento

O primeiro comando encontra uma lista de entradas, mas o campo sete não nos dá nada para distinguir entre elas, então não sabemos a quem as entradas se referem. No segundo comando, adicionando a --complementopção, obtemos tudo, exceto o campo sete.

Tubulação cortada em corte

Continuando com o arquivo “/etc/passwd”, vamos extrair o campo cinco. Este é o nome real do usuário que possui a conta de usuário .

grep "/bin/bash" /etc/passwd | corte -d':' -f5

O quinto campo tem subcampos separados por vírgulas. Eles raramente são preenchidos, então aparecem como uma linha de vírgulas.

Podemos remover as vírgulas canalizando a saída do comando anterior para outra invocação de cut. A segunda instância de cut usa a vírgula “,” como seu delimitador. A -sopção (somente delimitado) diz cutpara suprimir os resultados que não têm o delimitador neles.

grep "/bin/bash" /etc/passwd | corte -d':' -s -f5 | corte -d',' -s -f1

Como a entrada raiz não tem subcampos de vírgula no quinto campo, ela é suprimida e obtemos os resultados que buscamos — uma lista dos nomes dos usuários “reais” configurados neste computador.

O delimitador de saída

Temos um pequeno arquivo com alguns valores separados por vírgula. Os campos nestes dados fictícios são:

  • ID : um número de ID do banco de dados
  • First : O primeiro nome do assunto.
  • Last : O sobrenome do assunto.
  • email : Seu endereço de email.
  • Endereço IP : Seu endereço IP .
  • Marca : A marca do veículo motorizado que dirigem.
  • Modelo : O modelo do veículo motorizado que dirigem.
  • Ano : O ano em que seu veículo motorizado foi construído.
gato pequeno.csv

Se dissermos ao cut para usar a vírgula como delimitador, podemos extrair campos como fizemos antes. Às vezes, você precisará extrair dados de um arquivo, mas não deseja que o delimitador de campo seja incluído nos resultados. Usando o --output-delimiterpodemos dizer cut qual caractere – ou na verdade,  sequência de caracteres – usar em vez do delimitador real.

corte -d ',' -f 2,3 pequeno.csv
cut -d ',' -f 2,3 small.csv --output-delimiter=' '

O segundo comando diz cutpara substituir as vírgulas por espaços.

Podemos levar isso adiante e usar esse recurso para converter a saída em uma lista vertical. Este comando usa um novo caractere de linha como delimitador de saída. Observe o “$” que precisamos incluir para que o caractere de nova linha funcione e não seja interpretado como uma sequência literal de dois caracteres.

Usaremos greppara filtrar a entrada para Morgana Renwick e pedir cutpara imprimir todos os campos do campo dois até o final do registro e usar um caractere de nova linha como delimitador de saída.

grep 'renwick' small.csv | cut -d ',' -f2- --output-delimiter=$''

Um Oldie, mas Goldie

No momento em que escrevo, o comando little cut está se aproximando de seu 40º aniversário, e ainda o estamos usando e escrevendo sobre ele hoje. Suponho que cortar texto hoje é o mesmo que era há 40 anos. Ou seja, muito mais fácil quando você tem a ferramenta certa à mão.

maisroot

Recent Posts

O novo aplicativo “PC Manager” da Microsoft se parece muito com o CCleaner

Muitos aplicativos de limpeza estão disponíveis para Windows ao longo dos anos, mas hoje em…

7 meses ago

Como reiniciar um PS4

Seu PlayStation 4 está congelado? Seus jogos favoritos continuam travando? Reiniciar seu PS4 pode resolver…

7 meses ago

Veja por que as reticências são tão assustadoras ao enviar mensagens de texto…

A popularidade das mensagens de texto significou aprender uma forma totalmente nova de comunicação. Você…

7 meses ago

O telescópio James Webb acaba de capturar os “Pilares da Criação”

A foto dos "Pilares da Criação" tirada pelo Telescópio Espacial Hubble é uma das fotos…

7 meses ago

Você poderá baixar o Proton Drive mais cedo do que pensa

O Proton Drive saiu de seu estágio beta há algumas semanas, mas o aplicativo real…

7 meses ago

Como aumentar o zoom no Photoshop

Para ver suas fotos mais de perto ou para uma edição precisa , você pode…

7 meses ago