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
cutetr— 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
cutcomo 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 ' '