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.




