Différentes façons d'utiliser la commande de colonne dans Linux

Différentes façons d'utiliser la commande de colonne dans Linux

Avez-vous déjà été dans une situation pour travailler avec les fichiers CSV et produire une sortie au format tabulaire structuré? Récemment, je travaillais avec le nettoyage des données sur un fichier qui n'est pas dans une structure appropriée. Il a tellement d'espaces blancs entre chaque colonne et je dois le convertir au format CSV pour pousser à la base de données. Après avoir nettoyé et créé la sortie au format CSV, ma sortie n'est pas visuellement attrayante pour vérifier l'intégrité des données dans le fichier CSV. C'est le moment où la commande «colonne» me mène utile.

Selon ManPage, le colonne commande "listes de colonnes". En termes simples, le colonne est un utilitaire simple qui peut formater votre sortie en un colonne format (lignes et champs) basés sur la structure de votre fichier source. Le colonne La commande fait partie du package Util-Linux.

Un point important à noter ici est colonne Le commandement se comporte différemment dans les distros basés sur Debian et basés sur de Debian. La raison en est que la distribution basée à Debian utilise «colonne" depuis bsdmainutils au lieu de util-linux. La version en amont du colonne la commande est plus récente que la bsdmainutils emballer. Jetez un œil au rapport de bogue pour en savoir plus à ce sujet.

$ dpkg -s $ (quelle colonne) 
Quelle colonne

À des fins de démonstration, j'utilise Centos 7 et affichera différentes options entre Ubuntu et Centos 7. Pour vérifier le colonne La version exécute la commande suivante. Cette commande affichera également le util-linux version de package.

$ Column --Version # ne fonctionnera pas dans Debian / Ubuntu 

Vous pouvez également vérifier la version d'Util-Linux en exécutant les commandes ci-dessous.

$ rpm -qa | grep -i util-linux # redhat, centos, fedora, amazon linux $ dpkg -l | grep -i util-linux # ubuntu 

Avant d'utiliser le colonne commander un bon endroit pour démarrer sera la page de l'homme et explorer ses options.

Colonne de $ man 

Liste du contenu du fichier au format tabulaire

Le colonne la commande peut créer une table en passant le nom de fichier comme argument avec le -t drapeau. j'utilise / etc / passwd Comme le fichier d'entrée.

$ colonne -t / etc / passwd 
Liste des contenus du fichier au format de table

En regardant l'image ci-dessus, vous pouvez penser que ce n'est pas ce à quoi nous nous attendions et la sortie peut sembler bizarre. Oui! Tu as raison. Colonnes considérer L'espace comme délimiteur par défaut Lors de la création d'une table. Ce comportement peut être remplacé en passant un délimiteur personnalisé.

Délimiter personnalisé

Les délimiteurs personnalisés vous offrent un large éventail d'options pour travailler. Pour créer une utilisation de délimiteur personnalisée -s drapeau suivi d'un délimiteur. Maintenant, nous allons utiliser ":" En tant que délimiteur à diviser / etc / passwd déposer.

$ colonne -s ":" -t / etc / passwd 
Délimiteur

Regardez l'image ci-dessus où la table est bien formatée et structurée. Depuis util-linux version 2.23 option -s a été changé pour ne pas être gourmand.

Exécutez maintenant la même commande dans Ubuntu Et le résultat sera gourmand. Ceci est dû au fait colonne commande (bsdmainutils) sur Ubuntu traitera plusieurs mots adjacents comme un seul mot.

$ colonne -s ":" -t / etc / passwd 
Sortie gourmand

Pour surmonter cette utilisation du comportement -n drapeau.

$ colonne -t -s ":" -n / etc / passwd # uniquement sur Debian / Ubuntu 
Sortie non maigre

Ignorer les lignes vides blanches dans la sortie du fichier

Lorsque vous avez des lignes vides dans votre fichier d'entrée, la commande colonne par défaut l'ignore. Voir mon fichier d'entrée qui est au format CSV et j'ai ajouté une ligne vierge entre chaque ligne. Créons maintenant une table comme nous l'avons fait avec ce fichier d'entrée.

$ colonne -t -s ";" factice.SMS 
Ignorer vide pendant que les lignes

À partir de l'image ci-dessus, vous pouvez voir mon fichier d'entrée factice.SMS a des lignes vides et quand j'essaie de créer une table, les lignes vides sont ignorées.

Note: Ceci est le comportement par défaut pour le "bsdmainutils / util-linux»Variante du colonne commande. Mais colonne (bsdmainutils) a la possibilité de remplacer ce comportement en passant -e drapeau.

$ colonne -e -t -s "," mannequin.txt # uniquement sur Debian / Ubuntu 
Déposer les lignes blanches

Depuis l'image ci-dessus, vous pouvez voir que le tableau est formaté correctement et les lignes vides ne sont pas ignorées.

Séparateur de sortie de fichier

Par défaut, deux espaces blancs seront utilisés comme séparateurs de sortie. Ce comportement peut être remplacé en passant -o drapeau. Vous n'aurez pas d'option de séparateur de sortie disponible dans le colonne (bsdmainutils).

$ colonne -t -s "," -o "||" factice.TXT # uniquement sur la distribution basée sur RHEL 
Séparateur de sortie de fichier

Convertir les lignes de fichiers en colonnes

En utilisant le -X le drapeau que vous pouvez convertir les lignes en colonnes. Ce comportement est le même dans les deux rhel et ubuntu variantes de la commande colonne. Il s'agit d'une fonctionnalité très utile lorsque vous devez saisir un certain champ via la commande awk ou colonne, puis la convertir en en-tête pour votre fichier CSV.

$ colonne -x fillcols.SMS 
Convertir les lignes de fichiers en colonnes

Lorsque vous exécutez le colonne Commande sans utiliser de drapeaux, le comportement sera le même que de passer -X drapeau.

Trouver la taille de la colonne

Le colonne utilise une variable environnementale ($ Colonnes) Pour découvrir la taille de votre terminal et en fonction de la taille Utiliser la commande Echo, la taille du tableau sera affichée dans le terminal.

$ Colonnes Echo $ 

Regardez l'image ci-dessous. Au départ, j'ai redimensionné mon terminal pour avoir $ Colonnes la taille définie sur 60 et exécuté la commande colonne. Encore une fois, j'ai redimensionné mon terminal pour avoir $ Colonnes la taille définie sur 114 et a encore exécuté la commande de colonne. Vous pouvez voir la différence dans la façon dont la colonne imprime le tableau lorsque nous redimensions le terminal.

$ colonne -t -s ":" / etc / passwd | tête 5 
Tailles de colonne de redimension

C'est tout pour cet article. Si vous avez des commentaires, veuillez le fournir dans la section des commentaires.