Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

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

syca

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

sputnick

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)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

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

syca

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

Haleth

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

sputnick

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


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

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

Postmortem

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

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

Hors ligne

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

syca

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

Postmortem

Re : Utilser awk pour afficher un fichier csv

De rien ! Bonne soirée


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

Hors ligne

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

sputnick

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)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

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

pingouinux

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

Postmortem

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 !


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

Hors ligne

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

Postmortem

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 !


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

Hors ligne

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

pingouinux

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

Postmortem

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)


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

Hors ligne