column, pr e fmt - Entendendo Comandos de Formatacao de Texto

column, pr e fmt - Entendendo Comandos de Formatacao de Texto

O Que Estes Tres Comandos Fazem

column alinha campos em colunas organizadas, pr pagina e formata texto em multiplas colunas, e fmt reflui texto de paragrafo para uma largura especificada. Os tres tornam o texto mais legivel e sao tipicamente usados no final de um pipeline apos filtragem com grep ou awk.

Resumo Rapido

  • Alinhar dados delimitados por espaco/tab em uma tabela --> column -t
  • Exibir uma lista longa em multiplas colunas --> pr -N -t
  • Refluir linhas longas para uma largura fixa --> fmt -w 72

column - Alinhando Campos em uma Tabela

Quando voce usa cat em dados delimitados por espaco ou tab, os campos nao se alinham. column -t calcula a largura maxima de cada campo e preenche com espacos para alinha-los.

Uso Basico: Alinhar Dados Delimitados por Espaco

echo -e "name age city\nAlice 30 Tokyo\nBob 25 Osaka" | column -t
name   age  city
Alice  30   Tokyo
Bob    25   Osaka

Formatando Arquivos CSV ou Delimitados por Dois-Pontos

Use -s para especificar o delimitador.

head -5 /etc/passwd | column -t -s:
root    x  0  0  root    /root        /bin/bash
daemon  x  1  1  daemon  /usr/sbin    /usr/sbin/nologin
bin     x  2  2  bin     /bin         /usr/sbin/nologin
sys     x  3  3  sys     /dev         /usr/sbin/nologin
sync    x  4  65534  sync  /bin       /bin/sync

A combinacao -t -s e especifica do Linux (versao util-linux do column). No macOS (versao BSD), o comportamento de -s difere ou pode nao ser suportado. Este artigo assume Linux.

Layout em Multiplas Colunas com -c

Use -c para especificar a largura da pagina em caracteres, e column organizara as entradas em multiplas colunas automaticamente.

ls /etc | column -c 80
adduser.conf   dhcp           group          magic          protocols
alternatives   environment    hostname       modprobe.d     resolv.conf
apt            fstab          lsb-release    os-release     rsyslog.conf
...

pr - Paginando e Organizando Saida em Colunas

pr foi originalmente projetado para formatar arquivos de texto para impressao, adicionando cabecalhos, rodapes e paginacao. Hoje e mais comumente usado para saida em multiplas colunas no terminal e comparacao lado a lado de arquivos.

Multiplas Colunas

Use -N para especificar o numero de colunas.

ls /usr/bin | pr -3 -t
[                addpart          apt-add-repository
aa-enabled       addr2line        apt-cache
aa-exec          appstreamcli     apt-cdrom
...
  • -3: layout em 3 colunas
  • -t: Suprime o cabecalho e rodape (nome do arquivo, data, numero da pagina)

Sem -t, pr adiciona um cabecalho com o nome do arquivo, data e numero da pagina. Ao usar no terminal, quase sempre inclua -t.

Comparacao de Arquivos Lado a Lado

-m mescla multiplos arquivos lado a lado.

pr -m -t file1.txt file2.txt

Esta e uma forma rapida de comparar visualmente dois arquivos de texto sem marcadores de diff.

Controlando Largura e Linhas por Pagina

pr -3 -t -w 120 -l 60 large_list.txt
  • -w 120: Largura da pagina de 120 caracteres
  • -l 60: 60 linhas por pagina

fmt - Refluindo Texto de Paragrafo

Texto copiado da web ou gerado por programas frequentemente tem comprimentos de linha inconsistentes. fmt reconhece limites de paragrafo e reflui o texto para uma largura especificada.

Uso Basico: Refluir para uma Largura Fixa

cat long_text.txt | fmt -w 72

A largura padrao varia conforme a implementacao; use -w explicitamente para garantir.

Refluxo com Reconhecimento de Paragrafos

Linhas em branco marcam os limites de paragrafo. fmt reflui cada paragrafo independentemente.

cat README.txt | fmt -w 80
This is the first paragraph of the document. It explains what the
program does and how to use it effectively.

This is the second paragraph. It provides additional details about
the configuration options available.

fmt junta linhas dentro de um paragrafo e as reflui. Ele trata tudo entre linhas em branco como um bloco, entao quebras de linha manuais sao removidas. Nao execute fmt em arquivos contendo blocos de codigo ou listas com marcadores -- ele corrompe a formatacao.

Comprimindo Espacos Extras com -u

-u (espacamento uniforme) comprime multiplos espacos para um. Util para limpar texto com espacamento inconsistente.

echo "This  has   extra   spaces" | fmt -u
This has extra spaces

Quando Usar Qual

Caso de Uso Comando
Alinhar dados delimitados por espaco/tab em tabela column -t
Alinhar CSV/TSV para inspecao visual column -t -s,
Exibir lista de arquivos em multiplas colunas ls | column -c 80
Organizar lista longa em 2-3 colunas pr -N -t
Comparar dois arquivos de texto lado a lado pr -m -t
Refluir linhas longas para largura fixa fmt -w 72
Comprimir espacos em branco extras no texto fmt -u

Padroes de Pipeline

Estes comandos funcionam melhor no final de um pipeline como passo final de formatacao.

# Extrair colunas especificas de CSV e exibir como tabela
cut -d, -f1,3,5 data.csv | column -t -s,

# Listar arquivos .conf em /etc em 3 colunas
find /etc -maxdepth 1 -name "*.conf" | pr -3 -t

# Refluir um log longo do git para leitura mais facil
git log --oneline -20 | fmt -w 72

Proximas Leituras