Recherche de site Web

Différentes façons d'utiliser la commande Column sous Linux


Avez-vous déjà été amené à travailler avec des fichiers CSV et à produire des résultats sous forme de tableau structuré ? Récemment, je travaillais sur le nettoyage des données sur un fichier qui n'est pas dans une structure appropriée. Il y a tellement d'espaces entre chaque colonne et je dois le convertir au format CSV pour le transférer vers 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 » m'est utile.

Selon la page de manuel, la commande column « listes de colonnes ». En termes simples, la colonne est un utilitaire simple qui peut formater votre sortie au format colonne (lignes et champs) en fonction de la structure de votre fichier source. La commande column fait partie du package util-linux.

Un point important à noter ici est que la commande column se comporte différemment dans les distributions basées sur Debian et sur Rhel. La raison est que la distribution basée sur Debian utilise « column » de bsdmainutils au lieu de util-linux. La version amont de la commande column est plus récente que le package bsdmainutils. Jetez un œil au rapport de bug pour en savoir plus à ce sujet.

dpkg -S $(which column)

À des fins de démonstration, j'utilise CentOS 7 et je montrerai différentes options entre Ubuntu et CentOS 7. Pour vérifier la version de la colonne, exécutez la commande suivante. Cette commande affichera également la version du package util-linux.

column --version  # will not work in 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 la commande column, un bon point de départ sera la page de manuel et explorera ses options.

man column

Répertorier le contenu du fichier au format tabulaire

La commande column peut créer une table en passant le nom du fichier comme argument avec l'indicateur -t. J'utilise /etc/passwd comme fichier d'entrée.

column -t /etc/passwd

En regardant l'image ci-dessus, vous penserez peut-être que ce n'est pas ce à quoi nous nous attendions et le résultat peut paraître étrange. Oui! Tu as raison. Les colonnes considèrent l'espace comme délimiteur par défaut lors de la création d'un tableau. Ce comportement peut être remplacé en passant un délimiteur personnalisé.

Délimiteur personnalisé

Les délimiteurs personnalisés vous offrent un large éventail d'options avec lesquelles travailler. Pour créer un délimiteur personnalisé, utilisez l'indicateur -s suivi d'un délimiteur. Nous allons maintenant utiliser “: ” comme délimiteur pour diviser le fichier /etc/passwd.

column -s ":"  -t /etc/passwd

Regardez l'image ci-dessus où le tableau est bien formaté et structuré. Depuis la version 2.23 de util-linux, l'option -s a été modifiée pour ne pas être gourmande.

Exécutez maintenant la même commande dans Ubuntu et le résultat sera gourmand. En effet, la commande column (bsdmainutils) sur Ubuntu traitera plusieurs mots adjacents comme un seul mot.

column -s ":"  -t /etc/passwd

Pour surmonter ce comportement, utilisez l'indicateur -n.

column -t -s ":" -n /etc/passwd             # Only on Debian/Ubuntu

Ignorer les lignes vides blanches dans la sortie du fichier

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

column -t -s ";" dummy.txt

À partir de l'image ci-dessus, vous pouvez voir que mon fichier d'entrée dummy.txt contient des lignes vides et lorsque j'essaie de créer un tableau, les lignes vides sont ignorées.

Remarque : Il s'agit du comportement par défaut pour la variante « bsdmainutils/util-linux » de la commande column. Mais la colonne (bsdmainutils) a la possibilité de remplacer ce comportement en passant l'indicateur -e.

column -e -t -s "," dummy.txt        # Only on Debian/Ubuntu

À partir de l'image ci-dessus, vous pouvez voir que le tableau est correctement formaté et que 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 l'indicateur -o. Vous n'aurez pas d'option de séparateur de sortie disponible dans la colonne (bsdmainutils).

column -t -s "," -o "||" dummy.txt	# Only on Rhel based distro

Convertir les lignes du fichier en colonnes

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

column -x fillcols.txt

Lorsque vous exécutez la commande column sans utiliser d'indicateur, le comportement sera le même que si vous passiez l'indicateur -x.

Rechercher la taille de la colonne

La colonne utilise une variable d'environnement ($COLUMNS) pour connaître la taille de votre terminal et en fonction de la taille, utilisez la commande echo, la taille de la table sera affichée dans le terminal .

echo $COLUMNS

Regardez l'image ci-dessous. Initialement, j'ai redimensionné mon terminal pour avoir $COLUMNS la taille définie sur 60 et j'ai exécuté la commande column. Encore une fois, j'ai redimensionné mon terminal pour que $COLUMNS ait la taille définie sur 114 et j'ai réexécuté la commande column. Vous pouvez voir la différence dans la façon dont la colonne imprime le tableau lorsque nous redimensionnons le terminal.

column -t -s ":" /etc/passwd | head 5

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