Conceitos Basicos de cut, paste e tr: Extracao de Colunas e Conversao de Caracteres

Conceitos Basicos de cut, paste e tr: Extracao de Colunas e Conversao de Caracteres

O Que Voce Vai Aprender

  • Extrair colunas especificas de arquivos CSV/TSV usando cut
  • Mesclar multiplos arquivos lado a lado usando paste
  • Traduzir, deletar e comprimir caracteres usando tr
  • Combinar os tres com pipes para processamento pratico de texto

Resumo Rapido

Comando Uso Principal
cut Extrair campos especificos 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 versoes BSD de cut e tr — pequenas diferencas de comportamento podem ocorrer

O que o cut faz?

cut fatia cada linha de texto para extrair campos especificos ou posicoes de caracteres. E a ferramenta ideal para extrair colunas de arquivos CSV/TSV ou logs de largura fixa.

Extracao de campos (-f / -d)

Use -d para especificar o delimitador e -f para selecionar o(s) numero(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

Extracao por posicao de caractere (-c)

Fatiar por posicao de caractere — util 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, nao bytes (-b e a opcao baseada em bytes). Para conjuntos de caracteres multi-byte, -c geralmente e a escolha correta.

Quais sao as armadilhas comuns do cut?

Numeros de campo comecam em 1 (nao 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 nao pode tratar multiplos delimitadores consecutivos como um unico delimitador (ex., multiplos espacos). Use awk para isso.

O que o paste faz?

paste junta arquivos linha por linha, colocando o conteudo de cada arquivo em uma coluna separada. Pense em cat como vertical (anexar linhas) versus paste como horizontal (anexar colunas).

Forma basica

# 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 serie, transformando suas linhas em uma unica 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 le da stdin, entao e sempre usado com um pipe ou redirecionamento de entrada.

Traducao 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

Delecao 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 sequencias do mesmo caractere em um unico.

# 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 nao suporta regex. Para substituicao baseada em padroes, use sed ou awk.

Como combina-los em um pipeline?

Cada comando tem escopo restrito mas e 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 especificos tr -d SET
Comprimir caracteres repetidos tr -s SET
Logica multi-delimitador ou regex awk

Erros comuns a evitar

  • Tratar numeros de campo do cut como base 0 (eles comecam em 1)
  • Passar regex para tr (ele so aceita conjuntos de caracteres, nao padroes)
  • 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 ' '

Proximas Leituras