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 06/09/2018, à 16:09

TheFrog21

Remplacement champs d'un CSV en fonction d'une colonne

Bonjour!

J'ai un fichier csv, j'aimerai faire des modifications sur certains champs en fonction d'une colonne, je m'explique:

Mon fichier a cette tete:

E;CLI;adresse;adresse;adresse
E;CPT;nom prenom;sexe;age;taille;poids
E;INT;portable;fixe;numCB
E;ABO;email;email;email;email
E;ABO;email;email;email;email
E;ABO;email;email;email;email
E;ABO;email;email;email;email
E;ABO;email;email;email;email
E;SOR;yeux;yeux;yeux;yeux
E;SOR;yeux;yeux;yeux;yeux
E;SOR;yeux;yeux;yeux;yeux
E;SOR;yeux;yeux;yeux;yeux
E;SOR;yeux;yeux;yeux;yeux
E;CLI;adresse;adresse;adresse
E;CPT;nom prenom;sexe;age;taille;poids
E;CPT;nom prenom;sexe;age;taille;poids
E;INT;portable;fixe;numCB
E;ABO;email;email;email;email
E;ABO;email;email;email;email
E;SOR;yeux;yeux;yeux;yeux

Je voudrai par exemple:
Garder les 3 premiers caracteres de la 4eme colonne si la colonne 2 est CLI.
Garder les 2 premiers caractères de la 3eme colonne si la colonne 2 est ABO.
Remplacer les 4 derniers caractère de la 3eme colonne par 0000 si la colonne 2 est INT.

Ce qui donnerai:

E;CLI;adresse;adr;adresse
E;CPT;nom prenom;sexe;age;taille;poids
E;INT;port0000;fixe;numCB
E;ABO;em;email;email;email
E;ABO;em;email;email;email
E;ABO;em;email;email;email
E;ABO;em;email;email;email
E;ABO;em;email;email;email
E;SOR;yeux;yeux;yeux;yeux
E;SOR;yeux;yeux;yeux;yeux
E;SOR;yeux;yeux;yeux;yeux
E;SOR;yeux;yeux;yeux;yeux
E;SOR;yeux;yeux;yeux;yeux
E;CLI;adresse;adr;adresse
E;CPT;nom prenom;sexe;age;taille;poids
E;CPT;nom prenom;sexe;age;taille;poids
E;INT;port0000;fixe;numCB
E;ABO;em;email;email;email
E;ABO;em;email;email;email
E;SOR;yeux;yeux;yeux;yeux

Si quelqu'un a une solution, un outil ou un code permettant de faire cela!

Merci à tous ceux qui pourront m'aider!

Hors ligne

#2 Le 06/09/2018, à 16:53

pingouinux

Re : Remplacement champs d'un CSV en fonction d'une colonne

Bonjour,

awk '
BEGIN{FS=OFS=";"}
{
 if($2=="CLI"){$4=substr($4,1,3)}
 if($2=="ABO"){$3=substr($3,1,2)}
 if($2=="INT"){gsub("....$","0000",$3)}
 print 
}
' fichier_1 >fichier_2

Édité : Petite simplification

Dernière modification par pingouinux (Le 06/09/2018, à 16:55)

Hors ligne

#3 Le 06/09/2018, à 18:01

Hizoka

Re : Remplacement champs d'un CSV en fonction d'une colonne

Une solution en bash smile

while read line
do
  IFS=';' 
  valeurs=(${line})
  case "${valeurs[1]}" in
    "ABO") valeurs[2]="${valeurs[2]:0:2}";;
    "CLI") valeurs[3]="${valeurs[3]:0:3}";;
    "INT") valeurs[2]="${valeurs[2]:0:-4}0000" ;;
  esac
  echo "${valeurs[*]}"
done < test > test2

Dernière modification par Hizoka (Le 06/09/2018, à 18:15)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 06/09/2018, à 18:19

TheFrog21

Re : Remplacement champs d'un CSV en fonction d'une colonne

Je teste ça, merci beaucoup, super communauté comme il existe peu ubuntu-fr.org!

Hors ligne