column, pr e fmt - Entendendo Comandos de Formatação de Texto

column, pr e fmt - Entendendo Comandos de Formatação de Texto

O Que Estes Três Comandos Fazem

column alinha campos em colunas organizadas, pr página e formata texto em múltiplas colunas, e fmt reflui texto de parágrafo para uma largura especificada. Os três tornam o texto mais legível e são tipicamente usados no final de um pipeline após filtragem com grep ou awk.

Resumo Rápido

  • Alinhar dados delimitados por espaço/tab em uma tabela --> column -t
  • Exibir uma lista longa em múltiplas colunas --> pr -N -t
  • Refluir linhas longas para uma largura fixa --> fmt -w 72

column - Alinhando Campos em uma Tabela

Quando você usa cat em dados delimitados por espaço ou tab, os campos não se alinham. column -t calcula a largura máxima de cada campo e preenche com espaços para alinhá-los.

Uso Básico: Alinhar Dados Delimitados por Espaço

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 combinação -t -s é específica do Linux (versão util-linux do column). No macOS (versão BSD), o comportamento de -s difere ou pode não ser suportado. Este artigo assume Linux.

Layout em Múltiplas Colunas com -c

Use -c para especificar a largura da página em caracteres, e column organizará as entradas em múltiplas 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 Saída em Colunas

pr foi originalmente projetado para formatar arquivos de texto para impressão, adicionando cabeçalhos, rodapes e paginação. Hoje é mais comumente usado para saída em múltiplas colunas no terminal e comparação lado a lado de arquivos.

Múltiplas Colunas

Use -N para especificar o número 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 cabeçalho e rodape (nome do arquivo, data, número da página)

Sem -t, pr adiciona um cabeçalho com o nome do arquivo, data e número da página. Ao usar no terminal, quase sempre inclua -t.

Comparação de Arquivos Lado a Lado

-m mescla múltiplos arquivos lado a lado.

pr -m -t file1.txt file2.txt

Esta é uma forma rápida de comparar visualmente dois arquivos de texto sem marcadores de diff.

Controlando Largura e Linhas por Página

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

fmt - Refluindo Texto de Parágrafo

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

Uso Básico: Refluir para uma Largura Fixa

cat long_text.txt | fmt -w 72

A largura padrão varia conforme a implementação; use -w explicitamente para garantir.

Refluxo com Reconhecimento de Parágrafos

Linhas em branco marcam os limites de parágrafo. fmt reflui cada parágrafo 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 parágrafo e as reflui. Ele trata tudo entre linhas em branco como um bloco, então quebras de linha manuais são removidas. Não execute fmt em arquivos contendo blocos de código ou listas com marcadores -- ele corrompe a formatação.

Comprimindo Espaços Extras com -u

-u (espacamento uniforme) comprime múltiplos espaços para um. Útil 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 espaço/tab em tabela column -t
Alinhar CSV/TSV para inspeção visual column -t -s,
Exibir lista de arquivos em múltiplas 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 espaços em branco extras no texto fmt -u

Padrões de Pipeline

Estes comandos funcionam melhor no final de um pipeline como passo final de formatação.

# 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

Próximas Leituras