Linux / Comando column: alinhar texto em tabelas no terminal

column -t organiza campos de texto em uma tabela alinhada para leitura no terminal. O comando ajusta a largura das colunas; ele não ordena os valores nem valida se os registros estão corretos. Use -s quando a entrada tiver um separador diferente dos espaços e tabulações do modo comum.

Os exemplos usam column do projeto util-linux. A aparência pode variar com a versão, a largura da saída e as opções de quebra de linha. Para processamento posterior por outro programa, preserve também a entrada em um formato bem definido, como tabulações, CSV ou JSON.

Sintaxe e implementação

column [opção...] [arquivo...]

A linha acima descreve a sintaxe e contém marcadores. Execute command -v column para verificar se o shell encontra o programa, e consulte column --version, column --help ou man column para conferir a implementação e as opções disponíveis. Sem um arquivo como argumento, column lê a entrada padrão.

As operações abaixo foram conferidas com column do util-linux 2.40.2 no Bash do Git para Windows, com arquivos locais de texto e finais de linha LF. Essa versão possui -t, -s, -o, -x e -c; opções de versões mais novas precisam ser confirmadas na instalação usada.

Preparar arquivos e alinhar uma tabela

Execute o bloco inteiro no Bash, em uma pasta onde possa criar arquivos. Ele cria uma pasta exclusiva dentro dela e prepara os dois arquivos usados nos exemplos. Os parênteses executam um subshell, que retorna à pasta anterior ao terminar; set -eu interrompe este bloco simples diante de falhas não tratadas ou variáveis não definidas.

(
set -eu
labdir=$(mktemp -d ./column-demo.XXXXXX)
cd "$labdir"
printf 'PACKAGE VERSION\nalpha 1.0\nlonger-name 2.0\n' > packages.txt
printf 'demo-a:x:2001:2001:Conta A:/home/demo-a:/bin/sh\ndemo-b:x:2002:2002:Conta B:/home/demo-b:/bin/sh\n' > passwd.demo.txt
column -t packages.txt
printf 'Arquivos do laboratório: %s\n' "$PWD"
)

A tabela mostra PACKAGE e VERSION no cabeçalho, seguidos de alpha 1.0 e longer-name 2.0. A segunda coluna começa na mesma posição, apesar dos nomes de tamanhos diferentes. A ordem dos registros continua sendo a ordem da entrada; se precisar ordenar os dados, faça essa operação separadamente, por exemplo com o comando sort.

Os nomes de pacotes, versões e contas são dados fictícios da prática. passwd.demo.txt tem sete campos separados por dois-pontos e não é o arquivo de contas do sistema. A última linha mostra o caminho completo da pasta criada; entre nele com cd e aspas para continuar os próximos exemplos.

Escolher separadores de entrada e de saída

Na mesma pasta de prática, use -s para informar os caracteres que separam os campos de entrada e -t para criar a tabela. O comando abaixo usa apenas o arquivo fictício preparado no bloco anterior.

column -s ':' -t passwd.demo.txt

Cada registro continua com sete colunas. Os espaços em Conta A e Conta B ficam dentro do quinto campo, pois o separador escolhido é o dois-pontos. Se você usasse apenas -t nesse arquivo, os dois-pontos não seriam interpretados como os limites desses campos.

No util-linux, -s ' :' especificaria espaço e dois-pontos como possíveis separadores, não uma sequência única de dois caracteres. Para usar somente dois-pontos, mantenha a forma -s ':' do exemplo. Confira o significado do separador na implementação instalada antes de tratar formatos mais complexos.

Com delimitador explícito, campos vazios também importam. printf 'a:b:c\n1::3\n' | column -s ':' -t mantém vazio o segundo campo do segundo registro e alinha 3 na terceira coluna. Esse tratamento não agrupa delimitadores consecutivos como se fossem um só.

A opção -o escolhe o texto entre as colunas da saída em modo tabela. column -t -o ' | ' packages.txt insere uma barra vertical entre PACKAGE e VERSION e entre os campos dos registros. O preenchimento de espaços para alinhamento continua existindo; -o não é uma conversão geral para um formato de intercâmbio de dados.

Formatar a entrada recebida por um pipe

O produtor pode enviar os dados diretamente pela entrada padrão. No exemplo, printf prepara um cabeçalho e dois registros; column organiza os campos recebidos.

printf 'name score\nkim 90\nlee 85\n' | column -t

A saída mantém name score, kim 90 e lee 85 na mesma ordem, com as duas colunas alinhadas. Esse pipeline apenas mostra o resultado no terminal. Ao usá-lo com comandos reais, confira primeiro os dados enviados pelo produtor: um nome que contenha espaços pode representar mais de um campo no modo padrão.

Comparar a entrada com a saída alinhada

O próximo exemplo usa o nome mais longo para determinar a largura da primeira coluna. AGE e os dois valores numéricos começam na mesma posição, mas não há ordenação por idade.

printf 'NAME AGE\nAna 7\nBenjamin 12\n' | column -t

Saída obtida na versão 2.40.2 conferida, com separação padrão entre colunas:

NAME      AGE
Ana       7
Benjamin  12

As idades ficam alinhadas à esquerda no início da segunda coluna. O número de espaços representa a apresentação, não a estrutura original. A entrada não ganha informação de tipo e a tabela não demonstra que os números ou os cabeçalhos sejam válidos.

Distinguir o modo tabela do preenchimento por linhas

Sem -t, column distribui os itens para preencher colunas antes de linhas. A opção -x escolhe preencher linhas antes de colunas. Esse modo serve para dispor uma lista; não substitui -t quando cada linha da entrada já representa um registro com campos.

Compare printf 'a\nb\nc\nd\n' | column -c 16 com printf 'a\nb\nc\nd\n' | column -x -c 16. Na versão conferida, o primeiro mostra a e c na primeira linha, b e d na segunda; com -x, mostra a e b, depois c e d. A opção -c fixa a largura para tornar essa comparação reproduzível, e o preenchimento pode usar tabulações.

Para tabelas largas, consulte as opções de largura, quebra ou truncamento antes de depender da aparência. Reduzir a largura de saída não garante, por si só, que todo texto longo seja cortado ou dividido como você deseja. Confira o resultado no terminal e na versão que serão usados.

Preservar os dados e conferir problemas

Não use a saída alinhada por espaços como prova de validade nem como entrada estável para extrair colunas depois. column -s ',' não interpreta as aspas e os campos com vírgulas de um CSV. Para esse formato, use um analisador adequado, como o modo CSV disponível nas versões compatíveis de gawk.

O comando lê os arquivos de entrada e mostra o resultado. Se salvar com >, escolha um arquivo de saída separado e ainda não usado. Não use o mesmo caminho como entrada e destino do redirecionamento, pois o shell pode esvaziá-lo antes da leitura. Confira o conteúdo salvo e as mensagens de erro antes de continuar.

Opções principais

Opção Uso
-t Calcula as colunas dos registros e cria uma tabela alinhada.
-s separadores Define os caracteres que separam os campos de entrada.
-o texto Define o separador entre colunas na saída em modo tabela.
-x Preenche linhas antes de colunas ao distribuir uma lista, em vez do modo tabela.

Pergunta frequente

O que fazer quando o comando column não é encontrado?

Confira com command -v column se o shell encontra o executável. Consulte o pacote que fornece o programa nos repositórios da sua distribuição e versão: o nome do pacote não precisa ser util-linux. Por exemplo, no Debian 13 trixie para amd64, a lista oficial de arquivos de bsdextrautils inclui /usr/bin/column. Após instalar o pacote apropriado, confira a versão e a ajuda antes de executar os exemplos.

Documentação

Consulte o manual do column do projeto util-linux, publicado em man7.org para os modos de preenchimento, separadores e opções de tabela. Compare essa documentação com a ajuda da versão instalada, pois o manual publicado pode incluir recursos mais recentes.