Introdução
Bem-vindo ao Laboratório de Corte de Texto no Linux. Neste laboratório, você aprenderá como usar o comando cut no Linux para extrair porções específicas de arquivos de texto. O comando cut é uma ferramenta poderosa de processamento de texto que permite extrair seções de cada linha de arquivos ou de dados canalizados (piped data).
Você aprenderá como usar diferentes opções do comando cut para extrair texto com base em delimitadores e posições de caracteres. Essa habilidade é particularmente útil ao trabalhar com arquivos de texto estruturados, como arquivos CSV, arquivos de log ou quaisquer dados que sigam um formato consistente.
Ao final deste laboratório, você será capaz de extrair e manipular dados de texto de forma eficiente em ambientes Linux, o que é uma habilidade fundamental para administração de sistemas, processamento de dados e tarefas de automação.
Entendendo o Uso Básico do Comando cut
Nesta etapa, você aprenderá o uso básico do comando cut. O comando cut no Linux é usado para extrair seções de cada linha de arquivos ou de dados canalizados (piped data).
Vamos começar criando um arquivo de dados simples com o qual podemos trabalhar:
cd ~/project
echo "name:age:city:occupation" > data/users.txt
echo "Alice:25:New York:Engineer" >> data/users.txt
echo "Bob:30:San Francisco:Designer" >> data/users.txt
echo "Charlie:22:Chicago:Student" >> data/users.txt
echo "Diana:28:Boston:Doctor" >> data/users.txt
Os comandos acima criam um arquivo chamado users.txt no diretório ~/project/data com cinco linhas de valores separados por dois pontos.
Agora, vamos examinar o conteúdo deste arquivo:
cat data/users.txt
Você deve ver a seguinte saída:
name:age:city:occupation
Alice:25:New York:Engineer
Bob:30:San Francisco:Designer
Charlie:22:Chicago:Student
Diana:28:Boston:Doctor
Usando cut com um Delimitador
A maneira mais comum de usar cut é com um delimitador para extrair campos específicos. A sintaxe básica é:
cut -d'delimitador' -f campos arquivo
Onde:
-despecifica o caractere delimitador-fespecifica qual(is) campo(s) extrairarquivoé o arquivo de entrada
Vamos extrair os nomes (primeiro campo) do nosso arquivo de dados:
cut -d':' -f1 data/users.txt
Este comando diz ao cut para:
- Usar
:como delimitador (-d':') - Extrair o primeiro campo (
-f1) - Do arquivo
data/users.txt
Você deve ver a seguinte saída:
name
Alice
Bob
Charlie
Diana
Agora, vamos extrair as idades (segundo campo):
cut -d':' -f2 data/users.txt
Saída:
age
25
30
22
28
Extraindo Múltiplos Campos
Você pode extrair múltiplos campos especificando-os como uma lista separada por vírgulas:
cut -d':' -f1,3 data/users.txt
Isso extrai o primeiro e o terceiro campos (nome e cidade):
name:city
Alice:New York
Bob:San Francisco
Charlie:Chicago
Diana:Boston
Extraindo uma Faixa de Campos
Você também pode extrair uma faixa de campos usando um hífen:
cut -d':' -f2-4 data/users.txt
Isso extrai os campos 2 a 4 (idade, cidade e ocupação):
age:city:occupation
25:New York:Engineer
30:San Francisco:Designer
22:Chicago:Student
28:Boston:Doctor
Combinando com Outros Comandos
O comando cut pode ser combinado com outros comandos usando pipes. Por exemplo, para extrair apenas as idades das pessoas que são engenheiros:
grep "Engineer" data/users.txt | cut -d':' -f2
Saída:
25
Tente experimentar com diferentes combinações de campos para se familiarizar com o comando.
Corte por Posição de Caractere
Além de cortar campos com base em delimitadores, o comando cut também pode extrair texto com base em posições de caracteres. Isso é útil ao trabalhar com formatos de dados de largura fixa ou quando você precisa extrair caracteres específicos de cada linha.
Criando Dados de Largura Fixa
Vamos criar um novo arquivo com dados de largura fixa para demonstrar este recurso:
cd ~/project
echo "ID Name Department Salary" > data/employees.txt
echo "001 John IT 75000" >> data/employees.txt
echo "002 Mary HR 65000" >> data/employees.txt
echo "003 Steve Sales 85000" >> data/employees.txt
echo "004 Jennifer Marketing 70000" >> data/employees.txt
Agora, vamos examinar este arquivo:
cat data/employees.txt
Você deve ver:
ID Name Department Salary
001 John IT 75000
002 Mary HR 65000
003 Steve Sales 85000
004 Jennifer Marketing 70000
Extraindo por Posição de Caractere
Para extrair texto com base em posições de caracteres, use a opção -c seguida pelas posições que você deseja extrair. A sintaxe é:
cut -c posições arquivo
Vamos extrair os IDs dos funcionários (primeiros 3 caracteres) do nosso arquivo de dados:
cut -c1-3 data/employees.txt
Este comando diz ao cut para extrair os caracteres 1 a 3 de cada linha. Você deve ver:
ID
001
002
003
004
Extraindo Caracteres Específicos
Você também pode extrair caracteres específicos, não consecutivos:
cut -c1,5,9 data/employees.txt
Isso extrai o 1º, 5º e 9º caracteres de cada linha:
I N
0 J
0 M
0 S
0 J
Extraindo de uma Posição Específica até o Fim
Para extrair caracteres de uma determinada posição até o final da linha, use um hífen após o número da posição:
cut -c5- data/employees.txt
Isso extrai os caracteres da posição 5 até o final de cada linha:
Name Department Salary
John IT 75000
Mary HR 65000
Steve Sales 85000
Jennifer Marketing 70000
Combinando Extração de Posição de Caractere com Piping
Você pode combinar o comando cut com outros comandos usando pipes. Por exemplo, para extrair apenas os nomes dos departamentos (caracteres 13-22) de funcionários com um salário maior que 70000:
grep -E "[7-9][0-9]000" data/employees.txt | cut -c13-22
Isso deve gerar:
IT
Sales
Exercício Prático
Tente extrair apenas os nomes (caracteres 5-12) do arquivo de funcionários:
cut -c5-12 data/employees.txt
Você deve ver:
Name
John
Mary
Steve
Jennifer
Como você pode ver, cortar por posição de caractere é especialmente útil para processar formatos de dados de largura fixa, onde cada campo ocupa um número específico de caracteres em cada linha.
Combinando cut com Outras Ferramentas de Processamento de Texto
Nesta etapa, você aprenderá como combinar o comando cut com outros comandos de processamento de texto do Linux para realizar tarefas mais complexas de extração e manipulação de dados.
Criar um Arquivo de Dados CSV
Primeiro, vamos criar um arquivo CSV (Valores Separados por Vírgula) para trabalhar:
cd ~/project
echo "Date,Product,Quantity,Price,Total" > data/sales.csv
echo "2023-01-15,Laptop,5,1200,6000" >> data/sales.csv
echo "2023-01-16,Mouse,20,25,500" >> data/sales.csv
echo "2023-01-17,Keyboard,15,50,750" >> data/sales.csv
echo "2023-01-18,Monitor,8,200,1600" >> data/sales.csv
echo "2023-01-19,Headphones,12,80,960" >> data/sales.csv
Vamos verificar o conteúdo deste arquivo:
cat data/sales.csv
Você deve ver:
Date,Product,Quantity,Price,Total
2023-01-15,Laptop,5,1200,6000
2023-01-16,Mouse,20,25,500
2023-01-17,Keyboard,15,50,750
2023-01-18,Monitor,8,200,1600
2023-01-19,Headphones,12,80,960
Combinando cut com grep
Você pode usar grep para encontrar linhas contendo padrões específicos e, em seguida, usar cut para extrair campos específicos dessas linhas:
grep "Laptop" data/sales.csv | cut -d',' -f3-5
Este comando primeiro encontra todas as linhas contendo "Laptop" e, em seguida, extrai os campos 3-5 (Quantidade, Preço e Total). Você deve ver:
5,1200,6000
Combinando cut com sort
Você pode usar sort para organizar os dados com base em um campo específico:
cut -d',' -f2,4 data/sales.csv | sort -t',' -k2nr
Este comando extrai o Produto (campo 2) e o Preço (campo 4), em seguida, os classifica com base no Preço em ordem numérica inversa. A opção -t',' especifica o delimitador para sort, -k2 indica a classificação pelo segundo campo, n significa classificação numérica e r para ordem inversa.
Você deve ver:
Product,Price
Laptop,1200
Monitor,200
Headphones,80
Keyboard,50
Mouse,25
Combinando cut com sed
O comando sed é um editor de fluxo que pode realizar transformações básicas de texto. Aqui está um exemplo combinando cut com sed:
cut -d',' -f1,2,5 data/sales.csv | sed 's/,/ - /g'
Isso extrai os campos Data, Produto e Total e, em seguida, substitui todas as vírgulas por " - ". Você deve ver:
Date - Product - Total
2023-01-15 - Laptop - 6000
2023-01-16 - Mouse - 500
2023-01-17 - Keyboard - 750
2023-01-18 - Monitor - 1600
2023-01-19 - Headphones - 960
Combinando cut com awk
O comando awk é uma ferramenta poderosa de processamento de texto. Veja como combiná-lo com cut:
cut -d',' -f2-4 data/sales.csv | awk -F',' 'NR > 1 {print $1 " costs $" $3 " per unit"}'
Isso extrai os campos 2-4 (Produto, Quantidade e Preço) e, em seguida, usa awk para formatar uma mensagem. A condição NR > 1 ignora a linha do cabeçalho e a instrução print formata a saída.
Você deve ver:
Laptop costs $1200 per unit
Mouse costs $25 per unit
Keyboard costs $50 per unit
Monitor costs $200 per unit
Headphones costs $80 per unit
Processando Múltiplos Arquivos
Você também pode usar cut com vários arquivos. Vamos criar outro arquivo:
echo "Category,Product,Stock" > data/inventory.csv
echo "Electronics,Laptop,15" >> data/inventory.csv
echo "Accessories,Mouse,50" >> data/inventory.csv
echo "Accessories,Keyboard,30" >> data/inventory.csv
echo "Electronics,Monitor,20" >> data/inventory.csv
echo "Accessories,Headphones,25" >> data/inventory.csv
Agora, vamos extrair o campo Produto de ambos os arquivos:
cut -d',' -f2 data/sales.csv data/inventory.csv
Você deve ver:
Product
Laptop
Mouse
Keyboard
Monitor
Headphones
Product
Laptop
Mouse
Keyboard
Monitor
Headphones
O comando cut processa todos os arquivos e gera todos os resultados sequencialmente. Observe que ambas as linhas de cabeçalho estão incluídas.
Ao combinar cut com outras ferramentas de processamento de texto, você pode realizar tarefas sofisticadas de manipulação de dados de forma eficiente no Linux.
Aplicações Práticas do Comando cut
Nesta etapa, você explorará algumas aplicações práticas do comando cut que você pode encontrar em cenários do mundo real.
Analisando Arquivos de Log
Arquivos de log são um caso de uso comum para ferramentas de processamento de texto. Vamos criar um simples arquivo de log no estilo Apache:
cd ~/project
cat > data/access.log << EOF
192.168.1.100 - - [15/Feb/2023:10:12:01 -0500] "GET /index.html HTTP/1.1" 200 2048
192.168.1.102 - - [15/Feb/2023:10:13:25 -0500] "GET /images/logo.png HTTP/1.1" 200 4096
192.168.1.103 - - [15/Feb/2023:10:14:10 -0500] "POST /login.php HTTP/1.1" 302 1024
192.168.1.100 - - [15/Feb/2023:10:15:30 -0500] "GET /dashboard.html HTTP/1.1" 200 3072
192.168.1.104 - - [15/Feb/2023:10:16:22 -0500] "GET /css/style.css HTTP/1.1" 404 512
192.168.1.105 - - [15/Feb/2023:10:17:40 -0500] "GET /index.html HTTP/1.1" 200 2048
EOF
Vamos extrair os endereços IP (primeiro campo) do arquivo de log:
cut -d' ' -f1 data/access.log
Você deve ver:
192.168.1.100
192.168.1.102
192.168.1.103
192.168.1.100
192.168.1.104
192.168.1.105
Agora, vamos extrair os códigos de status HTTP (9º campo):
cut -d' ' -f9 data/access.log
Você deve ver:
200
200
302
200
404
200
Processando Arquivos de Configuração
Outro caso de uso comum é o processamento de arquivos de configuração. Vamos criar um arquivo de configuração simples:
cat > data/config.ini << EOF
[Database]
host=localhost
port=3306
user=dbuser
password=dbpass
[Server]
host=192.168.1.10
port=8080
maxConnections=100
[Logging]
level=INFO
file=/var/log/app.log
EOF
Para extrair todos os nomes dos parâmetros (a parte antes do sinal de igual):
grep -v "^\[" data/config.ini | cut -d'=' -f1
Este comando usa grep -v "^\[" para excluir os cabeçalhos de seção (linhas começando com [), em seguida, usa cut para extrair a parte antes de =. Você deve ver:
host
port
user
password
host
port
maxConnections
level
file
Extraindo Dados de Arquivos CSV para Relatórios
Vamos criar um arquivo CSV mais complexo representando as notas dos alunos:
cat > data/grades.csv << EOF
StudentID,Name,Math,Science,English,History,Average
S001,John Smith,85,92,78,88,85.75
S002,Mary Johnson,90,88,92,85,88.75
S003,Robert Davis,78,80,85,92,83.75
S004,Jennifer Lee,95,93,90,87,91.25
S005,Michael Brown,82,85,88,90,86.25
EOF
Para gerar um relatório simples mostrando os nomes dos alunos e suas notas médias:
tail -n +2 data/grades.csv | cut -d',' -f2,6
O comando tail -n +2 ignora a linha do cabeçalho e cut extrai os campos Nome e Média. Você deve ver:
John Smith,85.75
Mary Johnson,88.75
Robert Davis,83.75
Jennifer Lee,91.25
Michael Brown,86.25
Para encontrar alunos com uma nota média acima de 85:
tail -n +2 data/grades.csv | cut -d',' -f2,6 | awk -F',' '$2 > 85 {print $1 " has an average of " $2}'
Você deve ver:
John Smith has an average of 85.75
Mary Johnson has an average of 88.75
Jennifer Lee has an average of 91.25
Michael Brown has an average of 86.25
Extraindo Colunas Específicas da Saída de Comandos
Você pode usar cut para extrair colunas específicas da saída de comandos. Por exemplo, para listar apenas os nomes e tamanhos dos arquivos no diretório atual:
ls -l ~/project/data | tail -n +2 | cut -d' ' -f5,9
Este comando lista os arquivos em formato longo, ignora a linha do cabeçalho e extrai o tamanho (campo 5) e o nome (campo 9). A saída exata dependerá dos seus arquivos, mas terá uma aparência semelhante a:
237 access.log
99 config.ini
203 employees.txt
179 grades.csv
110 inventory.csv
150 sales.csv
264 users.txt
Esses exemplos demonstram como o comando cut pode ser usado em vários cenários práticos para extrair e processar partes específicas de dados de texto.
Resumo
Neste laboratório, você aprendeu como usar o comando cut do Linux para extrair partes específicas de texto de arquivos. Você abordou:
- O uso básico de
cutcom delimitadores para extrair campos de arquivos de texto estruturados - Como extrair texto com base em posições de caracteres para formatos de dados de largura fixa
- Combinando
cutcom outras ferramentas de processamento de texto comogrep,sort,sedeawkpara manipulação de dados mais complexa - Aplicações práticas do comando
cutpara cenários comuns, como análise de logs, processamento de arquivos de configuração e relatórios de dados
O comando cut é uma ferramenta poderosa no conjunto de ferramentas de processamento de texto do Linux. Embora possa parecer simples a princípio, sua capacidade de extrair partes específicas de texto o torna inestimável para muitas tarefas de processamento de dados. Quando combinado com outros comandos Linux por meio de pipes, ele se torna parte de um sistema de processamento de texto flexível e poderoso.
Alguns pontos-chave:
- Use
-dpara especificar um delimitador e-fpara selecionar campos ao trabalhar com texto estruturado - Use
-cpara extrair caracteres específicos ao trabalhar com dados de largura fixa - Combine
cutcom outros comandos usando pipes para um processamento mais sofisticado - O comando
cuté mais eficaz quando os dados seguem um formato consistente
Com essas habilidades, você agora pode extrair e processar dados de texto de forma eficiente em ambientes Linux, o que é essencial para várias tarefas administrativas e de processamento de dados.



