Comment manipuler les colonnes d'un fichier csv sous linux

Publié le 19 Mai 2011

Pour compléter l'article précédent, voici une commande nettement plus puissante que cut: awk.

 

awk permet de sélectionner certaines colonnes (comme cut) mais permet nettement plus de choses:

 

On peut changer l'order des colonnes, changer les séparateurs (y compris utiliser différents séparateurs), insérer des caractères, faire des calculs à la volée, etc

 

Et encore cet article ne présente qu'une petite partie des capacités de awk.

 

Mais il y a une contre-partie, la syntaxe de la commande awk est également plus complexe.

Heueusement l'usage présenté ici reste assez simple.

 

Passons à la pratique:

 

Tout d'abord mon fichier csv a le format suivant:

nom,prénom,adresse,code postal, ville, achat du mois dernier, achat du mois en cours

 

En sortie je veux avoir le format suivant:

personne,adresse compléte, achat du mois en cours

 

Et voici la commande qui permet d'effectuer ceci

 

cat mes_donnees.csv | awk -F"," '{print $1 " " $2 "," $3 " " $4 " " $5 ","  $7}'

 

Alors quelques explication:

- l'option '-F' permet de spécifier le séparateur de champ

- avec la commande print on demande à awk d'afficher une ligne avec les champs lus en entrée.

- le $ permet de récupérer les champs ainsi $1 pour le nom, $2 pour le prénom, etc. Comme on ne veut pas les achats du mois dernier il n'y a pas de $6.

- il faut réécrire les séparateurs entre les champs. C'est plus lourd au niveau syntaxe mais ça permet également de combiner des champs. Ici on réunit nom et prénom dans un seul champ en affichant  un espace entre $1 et $2 (au lieu d'une virgule).

 

Pour finir une petite cerise sur le gâteau, awk permet également de calculer de nouveau champs à la volée.

 

Par exemple si je veux avoir le pourcentage d'augmentation des ventes par rapport au mois précedent:

 

cat mes_donnees.csv | awk -F"," '{print $1 " " $2 "," $3 " " $4 " " $5 ","  (($7-$6)*100/$6) "%"}'

Rédigé par Bliz

Publié dans #Linux

Repost 0
Commenter cet article

syndrael 07/05/2012 10:47


Merci de ce ptit truc.. mon AWK était rouillé depuis 18 ans..


Bonne journée


S.

Kevin 21/06/2011 17:03



Bonjour à toutes et à tous,


Si je me permets de vous solliciter aujourd'hui, c'est que j'ai quasiment tout essayé mais je ne trouve pas la réponse tout seul ...


Voici ma problématique :


Je souhaite manipuler un fichier CSV (séparateur ";") avec awk pour réorganiser les colonnes. Ce fichier est le résultat d'une exportation depuis un logiciel de gestion commerciale. Or il
présente un petit souci auquel je n'arrive pas à faire face ...


Ligne 1 : champ1;champ2;champ3;champ4;
Ligne 2 : champ1;champ2
sur plusieurs
lignes;champ3;champ4;
Ligne 3 : champ1;champ2;champ3;champ4;
Ligne 4 : champ1;champ2;champ3;champ4;
Ligne 5 : champ1;champ2
sur plusieurs
lignes;champ3;champ4;


Comment faire pour supprimer les saut de lignes des champs2 qui sont décomposés en plusieurs lignes ?