#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
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