Formatage sortie écran

Résolu
maverick301172 -  
 maverick301172 -
Bonjour,

Voilà mon pb !!

Je voudrais formater une sortie du style :

sum;schema;table;colonne;type;indicateur;delta;SOURCE;CIBLE
tabstruct;S1;T1;*;_COUNT;_COUNT;0;122511;122511
okastruct;S1;T1;*;_OK_A;_OK_A;92,13%;83;90

sous le format :

|----------|--------|-------|----------|--------|------------|-------|----------|----------|
|   sum    | schema | table | colonne  | type   | indicateur | delta | SOURCE   | CIBLE    |
|----------|--------|-------|----------|--------|------------|-------|----------|----------|
|tabstruct |S1      |T1     |*         |_COUNT  |_COUNT      |0      |122511    |122511    |
|okastruct |S1      |T1     |*         |_OK_A   |_OK_A       |92,13% |83        |90        |
|----------|--------|-------|----------|--------|------------|-------|----------|----------|


j'ai bien essayé avec un sed ==> sed -e 's/; */ | /g', mais c'est l'anarchie !!

Si quelqu'un avait une soluce, je suis preneur.

Merci d'avance

°O°
Configuration: Windows XP
Firefox 2.0.0.12

3 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Regarde du côté de "awk" et de la commande "printf" ;-))
    1
    1. maverick301172
       
      C'est ce que je suis en train de regarder, mais je ne trouve pas le moyen de donner une longueur à une colonne, mise à par en ajoutant 10 espaces et en faisant un substr sur la chaine.

      il doit y avoir une autre solution !!!
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    #! /bin/awk -f
    
    BEGIN {
    FS=";"
    printf "|----------|----------|----------|----------|----------|----------|----------|----------|----------|\n"
    }
    
    NR==1 {
    printf "|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|\n",$1,$2,$3,$4,$5,$6,$7,$8,$9
    printf "|----------|----------|----------|----------|----------|----------|----------|----------|----------|\n"
    }
    
    (NR==2),(NR==$NR) {
    printf "|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|\n",$1,$2,$3,$4,$5,$6,$7,$8,$9
    }
    
    END {
    printf "|----------|----------|----------|----------|----------|----------|----------|----------|----------|\n"
    }
    
    ;-))
    1
  3. maverick301172
     
    C'est super, merci beaucoup pour ton aide, j'y étais presque, j'avais déjà fait ça
    awk 'BEGIN { print ("+----------+--------+-------+----------+--------+------------+-------+----------+----------+")
    print ("| sum | schema | table | colonne | type | indicateur | delta | SOURCE | CIBLE |")
    print ("+----------+--------+-------+----------+--------+------------+-------+----------+----------+")
    FS=";"}
    {print ("|")
    printf (%10s, $1}
    print ("|")
    printf (%8s, $2}
    print ("|")
    printf (%7s, $3}
    print ("|")
    printf (%10s, $4}
    print ("|")
    printf (%8s, $5}
    print ("|")
    printf (%12s, $6}
    print ("|")
    printf (%7s, $7}
    print ("|")
    printf (%10s, $8}
    print ("|")
    printf (%10s, $9}
    print ("|")}
    END { print ("+----------+--------+-------+----------+--------+------------+-------+----------+----------+") }'

    Mais je préfère ta solution.

    encore une fois merci
    0