Conceitos Básicos de cut, paste e tr: Extração de Colunas e Conversão de Caracteres

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 cut e tr — 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 cut como 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 ' '

Próximas Leituras