Affichage en colonnes de même taille (tableau)

Salut,

J’utilise une commande qui affiche sur la sortie standard ceci :

4d6a430 | 11. [Fix] Buglist. | 2013-05-07 | 2013-05-07 c460034 | Fin d'heure Lundi 07/05 | 2013-05-06 | 2013-05-07

Toutes les colonnes ont la même taille, sauf la 2eme, ce qui décale toutes les autres et ne facilite pas la lecture.

J’aimerais donc transformer cette sortie pour qu’elle s’affiche ainsi :

4d6a430 | 11. [Fix] Buglist. | 2013-05-07 | 2013-05-07 c460034 | Fin d'heure Lundi 07/05 | 2013-05-06 | 2013-05-07

Connaissez vous quelque chose (une commande ?) en shell permettant de faire cela ?

Merci d’avance. :wink:

Salut,

Une commande secrète sans doute :slightly_smiling:

Salut,

Il existe la bien nommée commande column qui fait à peu près ce que tu souhaites :

column -s '|' -t input

Le truc c’est qu’elle supprime le séparateur en alignant, donc si tu veux le conserver il faut le préfixer par un caractère temporaire :

cat input | sed 's/|/#|/g' | column -s '#' -t

[quote=“ggoodluck47”]Salut,

Une commande secrète sans doute :slightly_smiling:[/quote]
Curieux ! :smiley: La voici :

[quote=“lroy”]Salut,

Il existe la bien nommée commande column qui fait à peu près ce que tu souhaites :

column -s '|' -t input

Le truc c’est qu’elle supprime le séparateur en alignant, donc si tu veux le conserver il faut le préfixer par un caractère temporaire :

cat input | sed 's/|/#|/g' | column -s '#' -t [/quote]
Cool ! Je connaissais pas cette commande, merci !
J’ai essayé et j’obtiens cette erreur :

$ maCommande | column -s '|' -t column: line too long 4d6a430 11. [Fix] Buglist. 2013-05-07 2013-05-07
Seule la première ligne est traitée.
Peut être un problème de fin de ligne…

Re,

Non pas curieux, bien que …, mais si tu veux avoir des réponses, il est important que tu prennes l’habitude de donner un maximum de renseignements, sans tomber dans l’excès, pour que celui ou ceux qui savent, s’intéressent à ton cas :slightly_smiling:

[quote=“ggoodluck47”]Re,

Non pas curieux, bien que …, mais si tu veux avoir des réponses, il est important que tu prennes l’habitude de donner un maximum de renseignements, sans tomber dans l’excès, pour que celui ou ceux qui savent, s’intéressent à ton cas :slightly_smiling:[/quote]
Je comprends.
Je m’étais dit que ça ne pouvait qu’alourdir le sujet et faire fuir ceux qui ne connaissent pas git, alors que c’est une question qui peut s’appliquer à la sortie de n’importe quelle commande.
Comme quoi, dur de se mettre à la place du lecteur.

[quote=“SmallFitz”]
J’ai essayé et j’obtiens cette erreur :

$ maCommande | column -s '|' -t column: line too long 4d6a430 11. [Fix] Buglist. 2013-05-07 2013-05-07
Seule la première ligne est traitée.
Peut être un problème de fin de ligne…[/quote]
Si j’inverse les deux lignes (le plus grande en premier donc), en l’éditant avec vim, ça marche.
Et si je l’inverse de nouveau avec vim (retour à la situation initiale) ça marche aussi. :119
Peut être du au fait qu’en éditant le fichier, j’ai changé les fins de ligne.

J’ai redirigé la sortie de ma commande dans un fichier “/tmp/out” pour mieux voir ce qu’il se passe.
Si en l’éditant (avec vim) j’insère une nouvelle ligne à la fin du fichier ça marche.
Si je fais un echo >> /tmp/out ça marche aussi.
Plus qu’à trouver comment insérer une nouvelle ligne à la fin de la sortie d’une commande directement via un pipe…

Solution :

4d6a430 | 11. [Fix] Buglist. | 2013-05-07 | 2013-05-07 c460034 | Fin d'heure Lundi 07/05 | 2013-05-06 | 2013-05-07

Explications :

Remplacer tous les pipes encadré d’un espace par un pipe encadré d’un dièse.

Remplacer le fin de ligne de la dernière ligne par un saut de ligne.

Découpe une ligne en colonne à chaque dièse rencontré et affiche un tableau de ces colonnes aux même dimensions.

Edit :

Ajout d’un entête pour nommer les colonnes :

Hash | Intitulé | Auteur | Commit | | | 4d6a430 | 11. [Fix] Buglist. | 2013-05-07 | 2013-05-07 c460034 | Fin d'heure Lundi 07/05 | 2013-05-06 | 2013-05-07

Salut,

Si cette démonstration ne mérite pas de figurer au wiki alors peu de choses le méritent !

C’est joli!! :041

même si c’est déjà résolu, j’apporte ma petite contribution afin d’avancer une autre méthode :

awk -F '|' '{printf "%-8s | %-25s | %-12s | %-11s\n", $1,$2,$3,$4 }' < <(maCommande)

Pour la comparaison entre les deux. La première va toujours utiliser des colonnes de la bonne taille, alors que la seconde va permettre permet de faire les traitement au fil de l’eau.