Diferentes maneiras de usar o comando da coluna no Linux

Diferentes maneiras de usar o comando da coluna no Linux

Você já esteve em uma situação para trabalhar com arquivos CSV e produzir saída em formato tabular estruturado? Recentemente, eu estava trabalhando com a limpeza de dados em um arquivo que não está em uma estrutura adequada. Possui tantos espaços de branco entre cada coluna e eu tenho que convertê -la em formato CSV para empurrar para o banco de dados. Após limpar e criar a saída no formato CSV, minha saída não é visualmente atraente para verificar a integridade dos dados no arquivo CSV. Este é o momento em que o comando "coluna" é útil para mim.

De acordo com a manpra, o coluna comando “Listas de colunas”. Em palavras simples, o coluna é um utilitário simples que pode formatar sua saída em um coluna formato (linhas e campos) com base na estrutura do seu arquivo de origem. O coluna O comando faz parte do pacote Util-Linux.

Um ponto importante a ser observado aqui é coluna O comando se comporta de maneira diferente em distritos baseados em Debian e Rhel. O motivo é que a distro baseada em Debian usa “coluna" de Bsdmainutils Em vez de UTIL-Linux. A versão a montante do coluna O comando é mais novo que o Bsdmainutils pacote. Dê uma olhada no relatório do bug para saber mais sobre isso.

$ dpkg -s $ (qual coluna) 
Qual coluna

Para fins de demonstração, estou usando CENTOS 7 e mostrará diferentes opções entre Ubuntu e CENTOS 7. Para verificar o coluna Versão Execute o seguinte comando. Este comando também mostrará o Util-linux versão do pacote.

$ colun -version # não funcionará em Debian/Ubuntu 

Você também pode verificar a versão do Util-Linux executando os comandos abaixo.

$ rpm -qa | Grep -i Util -Linux # Redhat, Centos, Fedora, Amazon Linux $ DPKG -L | grep -i util -linux # ubuntu 

Antes de usar o coluna comandar um bom lugar para começar será a página do homem e explorará suas opções.

$ coluna Man 

Listar o conteúdo do arquivo em formato tabular

O coluna O comando pode criar uma tabela passando o nome do arquivo como um argumento junto com o -t bandeira. estou usando /etc/passwd como o arquivo de entrada.

$ coluna -t /etc /passwd 
Listar o conteúdo do arquivo no formato da tabela

Olhando para a imagem acima, você pode pensar que não é isso que esperávamos e a saída pode parecer estranha. Sim! Você está certo. Colunas considerar espaço como delimitador padrão Ao criar uma tabela. Este comportamento pode ser substituído pela passagem de um delimitador personalizado.

Delímetro personalizado

Delimitadores personalizados oferecem uma ampla gama de opções para trabalhar. Para criar um uso de delimitador personalizado -s bandeira seguida por um delimitador. Agora vamos usar ":" como um delimitador para dividir /etc/passwd arquivo.

$ coluna -s ":" -t /etc /passwd 
Delimitador

Veja a imagem acima onde a tabela é bem formatada e estruturada. De Util-linux versão 2.23 opção -s foi alterado para não ser ganancioso.

Agora execute o mesmo comando em Ubuntu e o resultado será ganancioso. Isto é porque coluna comando (Bsdmainutils) sobre Ubuntu tratará várias palavras adjacentes como uma única palavra.

$ coluna -s ":" -t /etc /passwd 
Saída gananciosa

Para superar esse uso de comportamento -n bandeira.

$ column -t -s ":" -n/etc/passwd # apenas em debian/ubuntu 
Saída sem graça

Ignore linhas vazias brancas na saída de arquivo

Quando você tem linhas em branco em seu arquivo de entrada, o comando da coluna por padrão o ignora. Veja meu arquivo de entrada que está no formato CSV e eu adicionei uma linha em branco entre todas as linhas. Agora vamos criar uma tabela como fizemos antes com este arquivo de entrada.

$ coluna -t -s ";" fictício.TXT 
Ignore vazio enquanto linhas

Da imagem acima, você pode ver meu arquivo de entrada fictício.TXT tem linhas vazias e quando tento criar uma tabela, linhas vazias são ignoradas.

Observação: Este é o comportamento padrão para os dois “BSDMAINUTILS/UTIL-Linux”Variante do coluna comando. Mas coluna (Bsdmainutils) tem a opção de substituir esse comportamento passando -e bandeira.

$ coluna -e -t -s "," boneco.txt # apenas em Debian/Ubuntu 
Arquivar linhas brancas

A partir da imagem acima, você pode ver que a tabela é formatada corretamente e as linhas vazias não são ignoradas.

Separador de saída de arquivo

Por padrão, dois espaços brancos serão usados ​​como separadores de saída. Este comportamento pode ser substituído pela passagem -o bandeira. Você não terá uma opção separadora de saída disponível no coluna (Bsdmainutils).

$ column -t -s "," -o "||" fictício.txt # somente em distro baseada em RHEL 
Separador de saída de arquivo

Converter linhas de arquivo em colunas

Usando o -x A bandeira que você pode converter linhas em colunas. Este comportamento é o mesmo em ambos RHEL e Ubuntu variantes do comando da coluna. Este é um recurso muito útil quando você precisa pegar um determinado campo através do comando AWK ou da coluna e converta -o no cabeçalho do seu arquivo CSV.

$ coluna -x preenchcols.TXT 
Converter linhas de arquivo em colunas

Quando você executa o coluna comando sem usar nenhum sinalizador O comportamento será o mesmo que passar -x bandeira.

Encontre o tamanho da coluna

O coluna usa uma variável ambiental ($ Colunas) Para descobrir o tamanho do seu terminal e com base no tamanho Use o comando Echo, o tamanho da tabela será exibido no terminal.

$ eco $ colunas 

Dê uma olhada na imagem abaixo. Inicialmente, redimensionei meu terminal para ter $ Colunas o tamanho definido como 60 e executou o comando da coluna. Mais uma vez, redimensionei meu terminal para ter $ Colunas o tamanho definido como 114 e executou o comando da coluna novamente. Você pode ver a diferença na maneira como a coluna imprime a tabela quando redimensionamos o terminal.

$ column -t -s ":" /etc /passwd | Cabeça 5 
Redimensione tamanhos de coluna

É isso para este artigo. Se você tiver algum feedback, forneça -o na seção de comentários.