Commande pour tronquer dans un CSV
Résolu
Domcallaghan
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
Domcallaghan Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Domcallaghan Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je possède un fichier csv du type suivant :
Référence;Nom du produit;quantité;prix TTC;Catégorie
qui fait environ 500 produits que je veux intégrer à Prestashop or la BDD de Prestashop me refuse certains noms car ils sont trop longs. La BDD n'accepte que les chaînes de caractères de 128 ou moins.
Le but de la manoeuvre est donc de faire un script shell qui va tronquer les noms trop longs qui se trouve en deuxième position dans une ligne produit .
J'utilise cut -d";" pour découper mes lignes mais je ne sais pas trop comment faire tout un assemblage de commandes qui fonctionne correctement. Je l'ai bien couplé avec cat mais je me retrouve avec une colonne de noms, il faudrait que je puisse boucler le processus tant qu'il reste des produits.
Je pensais utiliser la commande awk mais je ne suis pas sûr de bien comprendre son fonctionnement.
Merci de votre aide.
Je possède un fichier csv du type suivant :
Référence;Nom du produit;quantité;prix TTC;Catégorie
qui fait environ 500 produits que je veux intégrer à Prestashop or la BDD de Prestashop me refuse certains noms car ils sont trop longs. La BDD n'accepte que les chaînes de caractères de 128 ou moins.
Le but de la manoeuvre est donc de faire un script shell qui va tronquer les noms trop longs qui se trouve en deuxième position dans une ligne produit .
J'utilise cut -d";" pour découper mes lignes mais je ne sais pas trop comment faire tout un assemblage de commandes qui fonctionne correctement. Je l'ai bien couplé avec cat mais je me retrouve avec une colonne de noms, il faudrait que je puisse boucler le processus tant qu'il reste des produits.
Je pensais utiliser la commande awk mais je ne suis pas sûr de bien comprendre son fonctionnement.
Merci de votre aide.
A voir également:
- Commande pour tronquer dans un CSV
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Diskpart commande - Guide
- Commande scannow - Guide
4 réponses
Salut,
Un exemple de 2 ou 3 lignes AVANT => APRÈS ne serait pas un luxe ;-))
Le but de la manoeuvre est donc de faire un script shell qui va tronquer les noms trop longs qui se trouve en deuxième position dans une ligne produit.
Un exemple de 2 ou 3 lignes AVANT => APRÈS ne serait pas un luxe ;-))
Salut,
Alors voici un exemple.
Exemple de ligne :
AVANT
Réf1;nomproduit1;10;15,00;catordinateur
Réf2;nomproduit2;10;15,00;catordinateur
Réf3;nomproduit3 mais ce nom est beaucoup trop long pour n'être qu'un nom de produit dans un site marchand alors il faut le tronquer;10;15,00;catordinateur
Réf4;nomproduit4 mais ce nom est beaucoup trop long pour n'être qu'un nom de produit dans un site marchand alors il faut le tronquer;10;15,00;catordinateur
APRES
Réf1;nomproduit1;10;15,00;catordinateur
Réf2;nomproduit2;10;15,00;catordinateur
Réf3;nomproduit3 mais ce nom est beaucoup trop long ...;10;15,00;catordinateur
Réf4;nomproduit4 mais ce nom est beaucoup trop long ...;10;15,00;catordinateur
Là, j'ai mis des points et je n'ai pas tenu compte des 128 caractères mais l'idée est là. Il faut regarder le nombre de caractères puis si c'est trop grand alors il faut tronquer pour avoir le maximum possible et éviter d'avoir une erreur lors de l'importation.
Alors voici un exemple.
Exemple de ligne :
AVANT
Réf1;nomproduit1;10;15,00;catordinateur
Réf2;nomproduit2;10;15,00;catordinateur
Réf3;nomproduit3 mais ce nom est beaucoup trop long pour n'être qu'un nom de produit dans un site marchand alors il faut le tronquer;10;15,00;catordinateur
Réf4;nomproduit4 mais ce nom est beaucoup trop long pour n'être qu'un nom de produit dans un site marchand alors il faut le tronquer;10;15,00;catordinateur
APRES
Réf1;nomproduit1;10;15,00;catordinateur
Réf2;nomproduit2;10;15,00;catordinateur
Réf3;nomproduit3 mais ce nom est beaucoup trop long ...;10;15,00;catordinateur
Réf4;nomproduit4 mais ce nom est beaucoup trop long ...;10;15,00;catordinateur
Là, j'ai mis des points et je n'ai pas tenu compte des 128 caractères mais l'idée est là. Il faut regarder le nombre de caractères puis si c'est trop grand alors il faut tronquer pour avoir le maximum possible et éviter d'avoir une erreur lors de l'importation.
$ cat plop
Réf1;nomproduit1;10;15,00;catordinateur
Réf2;nomproduit2;10;15,00;catordinateur
Réf3;nomproduit3 mais ce nom est beaucoup trop long pour n'être qu'un nom de produit dans un site marchand alors il faut le tronquer;10;15,00;catordinateur
Réf4;nomproduit4 mais ce nom est beaucoup trop long pour n'être qu'un nom de produit dans un site marchand alors il faut le tronquer;10;15,00;catordinateur
$ awk 'BEGIN{FS=OFS=";"} $2=substr($2,1,50){print}' plop
Réf1;nomproduit1;10;15,00;catordinateur
Réf2;nomproduit2;10;15,00;catordinateur
Réf3;nomproduit3 mais ce nom est beaucoup trop long pou;10;15,00;catordinateur
Réf4;nomproduit4 mais ce nom est beaucoup trop long pou;10;15,00;catordinateur
salut,
pas de chance dans ton exemple, le deuxième champ fait 127 caractères
XD
awk 'BEGIN{FS=OFS=";"}{$2=substr($2,1,128)}1' tonFIchier
pas de chance dans ton exemple, le deuxième champ fait 127 caractères
XD