#1 Le 25/03/2012, à 12:58
Utilser awk pour afficher un fichier csv
Bonjour tout le monde
,
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
Dernière modification par sputnick (Le 25/03/2012, à 13:55)
bashfr.org(random);
<Galileo> Vous savez ce qu'y fait plus d'effet que d'avoir le brevet, d'etre en vacances, d'avoir défoncé son sac et ses cours et toutes ces choses futiles ?
<Galileo> C'est de renommer le groupe msn "Amis College" en "Amis Lycee"...
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
.
çà 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.csvUbuntu 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
Merci pour votre réponse, çà m'a l'air géniale. C'est vraiment gentil
.
Merci à toi.
çà 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 ![]()
bashfr.org(random);
<Galileo> Vous savez ce qu'y fait plus d'effet que d'avoir le brevet, d'etre en vacances, d'avoir défoncé son sac et ses cours et toutes ces choses futiles ?
<Galileo> C'est de renommer le groupe msn "Amis College" en "Amis Lycee"...
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.csvPrecise 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
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 ? ![]()
$ column -t -s","
Nom Prénom Numéro vitesse
Gou Georges 15 70
Prole Bernard 18 80
Thlam Thierry 10 90Dernière modification par sputnick (Le 28/03/2012, à 22:34)
bashfr.org(random);
<Galileo> Vous savez ce qu'y fait plus d'effet que d'avoir le brevet, d'etre en vacances, d'avoir défoncé son sac et ses cours et toutes ces choses futiles ?
<Galileo> C'est de renommer le groupe msn "Amis College" en "Amis Lycee"...
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.csvAjouté : 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
)
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
Pages : 1
- Accueil
- » Forum
- » Terminal, scripts et ligne de commande
- » Utilser awk pour afficher un fichier csv