Conceitos Básicos de cut, paste e tr: Extração de Colunas e Conversão de Caracteres
O Que Você Vai Aprender
- Extrair colunas específicas de arquivos CSV/TSV usando
cut - Mesclar múltiplos arquivos lado a lado usando
paste - Traduzir, deletar e comprimir caracteres usando
tr - Combinar os três com pipes para processamento prático de texto
Resumo Rápido
| Comando | Uso Principal |
|---|---|
cut |
Extrair campos específicos ou faixas de caracteres |
paste |
Mesclar arquivos horizontalmente (coluna por coluna) |
tr |
Traduzir ou deletar caracteres um a um |
Ambiente
- SO: Ubuntu (GNU coreutils)
- macOS vem com versões BSD de
cutetr— pequenas diferenças de comportamento podem ocorrer
O que o cut faz?
cut fatia cada linha de texto para extrair campos específicos ou posições de caracteres. É a ferramenta ideal para extrair colunas de arquivos CSV/TSV ou logs de largura fixa.
Extração de campos (-f / -d)
Use -d para especificar o delimitador e -f para selecionar o(s) número(s) do campo.
# Extrair o 2o campo de uma linha separada por virgulas $ echo "Alice,30,Tokyo" | cut -d, -f2 30 # Extrair campos 1 e 2 de um TSV (delimitador padrao e tab) $ cut -f1,2 data.tsv # Extrair do campo 3 ate o final da linha $ cut -f3- data.tsv
Extração por posição de caractere (-c)
Fatiar por posição de caractere — útil para formatos de log de largura fixa.
# Extrair os primeiros 10 caracteres de cada linha $ cut -c1-10 access.log # Extrair do caractere 5 ate o final da linha $ cut -c5- access.log
-c conta caracteres, não bytes (-b é a opção baseada em bytes). Para conjuntos de caracteres multi-byte, -c geralmente é a escolha correta.
Quais são as armadilhas comuns do cut?
Números de campo começam em 1 (não 0). Campos vazios ainda contam — a::c em uma string delimitada por dois-pontos produz um campo 2 vazio.
# Numeracao de campos comeca em 1 $ echo "a:b:c" | cut -d: -f1 # → a $ echo "a:b:c" | cut -d: -f2 # → b # Campo vazio ainda conta $ echo "a::c" | cut -d: -f2 # → (linha vazia)
cut não pode tratar múltiplos delimitadores consecutivos como um único delimitador (ex., múltiplos espaços). Use awk para isso.
O que o paste faz?
paste junta arquivos linha por linha, colocando o conteúdo de cada arquivo em uma coluna separada. Pense em cat como vertical (anexar linhas) versus paste como horizontal (anexar colunas).
Forma básica
# Mesclar dois arquivos lado a lado (delimitador padrao e tab) $ paste names.txt scores.txt Alice 95 Bob 87 Carol 72 # Usar virgula como delimitador $ paste -d, names.txt scores.txt Alice,95 Bob,87 Carol,72
Comprimir um arquivo em uma linha (-s)
A flag -s processa cada arquivo em série, transformando suas linhas em uma única linha.
$ cat items.txt apple banana cherry $ paste -s -d, items.txt apple,banana,cherry
O que o tr faz?
tr traduz caracteres um a um entre dois conjuntos. Ele lê da stdin, então é sempre usado com um pipe ou redirecionamento de entrada.
Tradução de caracteres
# Minusculas para maiusculas $ echo "hello world" | tr 'a-z' 'A-Z' HELLO WORLD # Substituir espacos por underscores $ echo "foo bar baz" | tr ' ' '_' foo_bar_baz
Deleção de caracteres (-d)
# Deletar todos os digitos $ echo "abc123def456" | tr -d '0-9' abcdef # Remover quebras de linha (juntar todas as linhas em uma) $ tr -d '\n' < multiline.txt
Comprimir caracteres repetidos (-s)
-s colapsa sequências do mesmo caractere em um único.
# Comprimir multiplos espacos em um $ echo "foo bar baz" | tr -s ' ' foo bar baz # Comprimir multiplas quebras de linha em uma $ tr -s '\n' < file.txt
tr não suporta regex. Para substituição baseada em padrões, use sed ou awk.
Como combiná-los em um pipeline?
Cada comando tem escopo restrito mas é poderoso quando encadeado.
# Extrair coluna 2 do CSV, depois converter para maiusculas $ cut -d, -f2 users.csv | tr 'a-z' 'A-Z' # Extrair campo 1 do TSV, deduplicar, depois juntar com virgulas $ cut -f1 data.tsv | sort -u | paste -s -d, # Extrair IPs de um log de acesso e contar os unicos $ cut -d' ' -f1 access.log | sort | uniq -c | sort -rn
Resumo comparativo dos comandos
| Objetivo | Comando |
|---|---|
| Extrair uma coluna CSV/TSV | cut -f N -d DELIM |
| Extrair uma faixa de caracteres | cut -c N-M |
| Mesclar arquivos lado a lado | paste file1 file2 |
| Comprimir linhas de arquivo em uma | paste -s |
| Traduzir caracteres | tr SET1 SET2 |
| Deletar caracteres específicos | tr -d SET |
| Comprimir caracteres repetidos | tr -s SET |
| Lógica multi-delimitador ou regex | awk |
Erros comuns a evitar
- Tratar números de campo do
cutcomo base 0 (eles começam em 1) - Passar regex para
tr(ele só aceita conjuntos de caracteres, não padrões) - Mesclar arquivos com quantidades diferentes de linhas usando
paste(produz campos vazios)
Templates para copiar e colar
# Extrair coluna 2 do CSV cut -d, -f2 file.csv # Extrair os primeiros 5 caracteres por linha cut -c1-5 file.txt # Mesclar dois arquivos como colunas CSV paste -d, file1.txt file2.txt # Minusculas para maiusculas tr 'a-z' 'A-Z' # Comprimir multiplos espacos em um tr -s ' '