Rechercher : dans
Par :

[Shell-script] Alignement de colonnes

Dernière réponse le 1 nov 2007 à 12:43:48 Phil, le 25 avr 2007 à 11:36:56 
 Signaler ce message aux modérateurs

Salut à tous.

Comment faire pour aligner des colonnes par la droite. Voilà le type de fichier que je posséde :

-24.0068
25.2567
0.5895
5.26597
84.2389


Je voudrais obtenir :
-24.0068
 25.2567
  0.5895
 5.26597
 84.2389

Si l'un de vous à la réponse, bah ça m'intéresse :)

Merçi d'avance.
Configuration: Windows XP
Firefox 2.0.0.3

Meilleures réponses pour « [Shell script] Alignement de colonnes » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha-Bang Premièrement,...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Transformer des colonnes en lignes dans un fichier VoirDifférents outils de Linux sont très doués pour travailler avec des lignes, mais pas avec des colonnes (c'est leur rôle) Sed, Awk, Grep, etc. Cependant, il peut arriver pour X raisons que vous ayez un fichier où les données sont à lire en...

1

Phil, le 25 avr 2007 à 13:49:41

Personne n'a d'idées ? :(

Répondre à Phil

2

dubcek, le 25 avr 2007 à 14:19:13

Hi
je dirai, mais je peux pas tester: awk '{printf("%-20s\n", $0}'

Répondre à dubcek

3

jipicy, le 25 avr 2007 à 14:40:13

Salut,

Ou avec la commande "printf" du shell :

jp@MDK:~/tmpfs ssh$ cat plop

-24.0068
25.2567
0.5895
5.26597
84.2389

jp@MDK:~/tmpfs ssh$ while read i;do printf "%8s\n" "$i";done <plop

-24.0068
 25.2567
  0.5895
 5.26597
 84.2389

jp@MDK:~/tmpfs ssh$
;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

4

Phil, le 25 avr 2007 à 15:41:01

Merçi jipicy, ta méthode fonctionne parfaitement, mais impossible de la mettre en place dans un script. Si je l'écrit tel quelle, le script tourne en boucle.
As-tu une idée là dessus ?

Répondre à Phil

6

jipicy, le 25 avr 2007 à 15:51:39

Affiche ton script...

;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

7

Phil, le 25 avr 2007 à 16:44:24

Tiens, mais du coup je l'ai fait avec un awk et printf :

#!/bin/ksh

awk '{printf ("%8s\n",$1)}' $1 > tmp1
awk '{printf ("%8s\n",$2)}' $1 > tmp2
awk '{printf ("%8s\n",$3)}' $1 > tmp3
awk '{printf ("%8s\n",$4)}' $1 > tmp4
awk '{printf ("%3s\n",$5)}' $1 > tmp5
awk '{printf ("%8s\n",$6)}' $1 > tmp6
awk '{printf ("%8s\n",$7)}' $1 > tmp7

paste tmp1 tmp2 tmp3 tmp4 tmp5 tmp6 tmp7 > $1
rm tmp*
exit

Répondre à Phil

8

jipicy, le 25 avr 2007 à 16:48:31

Pourrait-on voir la "gueule" du ficher d'entrée aussi ($1) ?
Merci ;-))

PS. Ton script me parrait bien lourd vu comme ça ;-(( Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

11

Phil, le 26 avr 2007 à 09:32:31

Salut jipicy, voilà une parite du fichier d'entrée :

71.1426	-14.6447   P    2.50	     SCO	 70 29  0.0  -21-57 -0.0 0.069   DNK
71.1426	-14.6447   P   10.25	     KBS	 78 55 32.2   11 56 30.1 0.074   BER
71.1426	-14.6447   P   10.64	    SPB4	 78 10 44.0   16 20 53.5 0.340   NAO
71.1426	-14.6447   S   10.25	     KBS	 78 55 32.2   11 56 30.1 0.074   BER

J'ai volontairement supprimé les 2 premières colonnes sinon l'ensemble ne rentrait pas en largeur, les substring du awk ne correspondent donc pas.

PS : Je sais bien que le script est un peu lourd mais je fais avec ce je que je connais (je suis encore débutant) :)

Bien sûr si tu peux "optimiser" tout ça, tes suggestions seront plus que bienvenue :))

Répondre à Phil

12

jipicy, le 26 avr 2007 à 09:48:59

A adapter en fonction de la sortie désirée :

awk '{printf ("%8s %8s %8s %8s %4s %8s %8s %8s\n",$1,$2,$3,$4,$5,$6,$7,$8)}' fichier
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

13

Phil, le 27 avr 2007 à 11:38:30

Salut jipicy,

désolé pour le retard, c'est vrai que comme ça c'est un peu plus 'propre', mais je débute et je commence à peine à entrevoir toutes les possibilités et variantes pour une même actions.
Merçi encore...je pense que je ne vais pas tarder à créer un nouveau topic, je bloque encore sur un détail hahaha.

A plus... :)

Répondre à Phil

5

Phil, le 25 avr 2007 à 15:44:48

Alors autant pour moi, ça marche ! le problème est résolu. Mes excuses à dubsek, j'ai fait une erreur en tapant le awk et j'ai alors pensé que ta méthode ne fonctionnait pas....Elle marche, en fait, super bien.
Merçi à vous deux.

Répondre à Phil

9

chipo, le 25 avr 2007 à 17:58:00

Svp pouvez vous m'aider sur une commande shell qui permet
de verifier si un nom comporte le caractére spécial '
puis d'ajouter un \avant le caractére ' pour permettre d'insérer un nom dans une base de donné mysql
merci de m 'avoir aider

Répondre à chipo

10

jipicy, le 25 avr 2007 à 18:52:58

Salut,

[jp@MDK tmpfs]$ var="l'avenir de l'étoile"

[jp@MDK tmpfs]$ echo $var
l'avenir de l'étoile

[jp@MDK tmpfs]$ echo $var | sed "s/'/\\\'/g"
l\'avenir de l\'étoile

[jp@MDK tmpfs]$
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

14

piposa, le 1 nov 2007 à 12:31:59

Bonjour,
Je voulais savoir comment ont peut faire la même chose avec un programme C, Je m'explique :

J'ai un prog en C qui affiche :

150
24000
300

Le résultat que je veut avoir :

150
24000
300

Merci

Répondre à piposa

15

 dubcek, le 1 nov 2007 à 12:43:48

Et quelle est la différence ?

Répondre à dubcek