Contenu | Rechercher | Menus

Annonce

Le forum rencontre en ce moment quelques soucis de charge, il est possible qu'une erreur soit affichée quand vous postez un message, ne rechargez pas la page au risque de poster une seconde fois votre message

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 25/03/2012, à 12:58

Utilser awk pour afficher un fichier csv

Bonjour tout le monde smile,

Je sollicite votre aide car j'ai du mal a m'en sortir avec la commande awk. J'aimerai afficher a l'écran un fichier csv en colonne.

Exemple fichier csv:

Nom,Prénom,Numéro,vitesse
Gou,Georges,15,70
Prole,Bernard,18,80
Thlam,Thierry,10,90

Ce qui donnerai avec awk :

Nom        Prénom         Numéro       Vitesse
Gou        Georges        15                70
Prole       Bernard         18                80
Thlam      Thierry          10               90

Enfin plus ou moins, donc que les séparateur soit convertis en tabulation et peut être mettre des | pour séparer les colonnes. Je tiens vraiment a utiliser awk.

Je vous remercie beaucoup pour votre aide.

Je vous souhaite un bon dimanche.

Merci d'avance.

Hors ligne

#2 Le 25/03/2012, à 13:09

Re : Utilser awk pour afficher un fichier csv

Salut, voici :

awk -F, '
    function printdashes() {
        print "+----------+----------+----------+----------+"
    }
    function printmain() {
        printf("|%10s|%10s|%10s|%10s|\n", $1, $2, $3, $4)
    }
    BEGIN{
        printdashes()
    }
    {
        if (NR==1) {
            printf("\033[1m|    %-6s|  %-8s|  %-8s|  %-8s|\033[0m\n", $1, $2, $3, $4)
        } else if (NR==2) {
            printdashes()
            printmain()
        } else { 
            printmain()
        }
    }
    END{
        printdashes()
    }' FILE.CSV

img

Dernière modification par sputnick (Le 25/03/2012, à 13:55)


bashfr.org(random);
<StraToN> Tu vois, dessiner c'est un peu comme faire l'amour : plus tu pratiques et plus c'est beau
<Display> J'ai compris pourquoi tes dessins sont moches

Hors ligne

#3 Le 26/03/2012, à 12:47

Re : Utilser awk pour afficher un fichier csv

Bonjour,

Merci pour votre réponse, çà m'a l'air géniale. C'est vraiment gentil smile.

çà ne marche je suppose que si on connais le nombre de colonne et la longeur maximum d'une ligne ? Je me demandais si on pourvais le faire sans connaitre à l'anvance ces deux mesures ?

Encore merci.

Bonne journée.

Hors ligne

#4 Le 26/03/2012, à 12:52

Re : Utilser awk pour afficher un fichier csv

Ou plus basiquement:

sed 's/,/\t/g' file.csv

Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#5 Le 26/03/2012, à 14:24

Re : Utilser awk pour afficher un fichier csv

syca a écrit :

Merci pour votre réponse, çà m'a l'air géniale. C'est vraiment gentil smile.

Merci à toi.

syca a écrit :

çà ne marche je suppose que si on connais le nombre de colonne et la longeur maximum d'une ligne ? Je me demandais si on pourvais le faire sans connaitre à l'anvance ces deux mesures ?

Lance ça dans un terminal :


awk -vcol=$COLUMNS '
    BEGIN{
        mystr = "Peux t\047on etre au centre et faire de l\047informatique sans etre branche modem ?"
        len = length(mystr)
        num=(col+len)/2
        CONVFMT="%"int(num)"s\n"
        printf(CONVFMT, mystr)
    }            
'

Ça répond à la question wink


bashfr.org(random);
<StraToN> Tu vois, dessiner c'est un peu comme faire l'amour : plus tu pratiques et plus c'est beau
<Display> J'ai compris pourquoi tes dessins sont moches

Hors ligne

#6 Le 27/03/2012, à 11:11

Re : Utilser awk pour afficher un fichier csv

Salut,

awk 'BEGIN { FS="," }
     {
         if ( NF > NB_CHAMPS ) NB_CHAMPS=NF
         for ( NUM_CHAMP=1; NUM_CHAMP <= NF; NUM_CHAMP++ ) {
             if ( length($NUM_CHAMP) > LONGUEUR[NUM_CHAMP] ) LONGUEUR[NUM_CHAMP]=length($NUM_CHAMP)
             CHAMP[NR,NUM_CHAMP]=$NUM_CHAMP
         }
     }
     END {
         for ( LIGNE=1; LIGNE <= NR; LIGNE++ ) {
             for ( NUM_CHAMP=1; NUM_CHAMP < NB_CHAMPS; NUM_CHAMP++ ) {
                 printf ( "%-"LONGUEUR[NUM_CHAMP]+1"s", CHAMP[LIGNE,NUM_CHAMP] )
             }
             printf ( "%-"LONGUEUR[NB_CHAMPS]"s\n", CHAMP[LIGNE,NB_CHAMPS] )
         }
     }' fichier.csv

Precise Pangolin (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 28/03/2012, à 19:33

Re : Utilser awk pour afficher un fichier csv

Bonsoir,

Super merciii, çà marche impec smile

Bonne soirée.

Hors ligne

#8 Le 28/03/2012, à 21:30

Re : Utilser awk pour afficher un fichier csv

De rien ! Bonne soirée


Precise Pangolin (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#9 Le 28/03/2012, à 22:22

Re : Utilser awk pour afficher un fichier csv

Tout ça pour si peu ? tongue

$ column -t -s","
Nom    Prénom   Numéro  vitesse
Gou    Georges  15      70
Prole  Bernard  18      80
Thlam  Thierry  10      90

Dernière modification par sputnick (Le 28/03/2012, à 22:34)


bashfr.org(random);
<StraToN> Tu vois, dessiner c'est un peu comme faire l'amour : plus tu pratiques et plus c'est beau
<Display> J'ai compris pourquoi tes dessins sont moches

Hors ligne

#10 Le 28/03/2012, à 22:36

Re : Utilser awk pour afficher un fichier csv

En reprenant l'idée de sputnick #9, il y a encore plus simple :

column -ts, fichier.csv

Ajouté : Il m'a devancé

Dernière modification par pingouinux (Le 28/03/2012, à 22:36)

Hors ligne

#11 Le 28/03/2012, à 22:41

Re : Utilser awk pour afficher un fichier csv

Ah ben oui en effet, ça va bcp plus vite à taper!! Je ne connaissais pas column, je note !


Precise Pangolin (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#12 Le 06/04/2012, à 15:01

Re : Utilser awk pour afficher un fichier csv

Salut,
Je testais column là mais y'a un souci, il "mange" les champs vides le vilain !


Precise Pangolin (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#13 Le 06/04/2012, à 16:45

Re : Utilser awk pour afficher un fichier csv

Il faut ajouter l'option -n. Voici un extrait de man column

     -n      By default, the column command will merge multiple adjacent
             delimiters into a single delimiter when using the -t option; this
             option disables that behavior. This option is a Debian GNU/Linux
             extension.

Hors ligne

#14 Le 06/04/2012, à 18:35

Re : Utilser awk pour afficher un fichier csv

Ils sont bien chez Debian, mais sur les serveurs du taf, on a pas cette option (j'avais pris le temps d'aller voir le man quand meme avant de poster tongue)


Precise Pangolin (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

Haut de page ↑