Commande pour tronquer dans un CSV

Résolu/Fermé
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014 - Modifié par Domcallaghan le 6/12/2013 à 16:47
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014 - 6 déc. 2013 à 17:34
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.



A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 416
6 déc. 2013 à 16:49
Salut,

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 ;-))
0
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014
Modifié par Domcallaghan le 6/12/2013 à 16:55
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.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 416
6 déc. 2013 à 17:03
$ 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
0
Utilisateur anonyme
6 déc. 2013 à 17:03
salut,

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
0
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014
6 déc. 2013 à 17:21
Je vous remercie beaucoup, cela fonctionne à merveille. Bon et bah comme cela, je devrais pouvoir automatiser tout mon import de produits. Merci encore =)

P.S. Je pouvais mettre le contenu du fichier avec les noms trop longs mais bon, j'ai privilégié un exemple plus parlant.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 416
6 déc. 2013 à 17:23
De rien ;-))

Tiens pour le fun, le même avec sed :

sed 's/\([^;]*\)\(;[^;]\{50\}\)[^;]*\.*/\1\2/' plop
0
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014
6 déc. 2013 à 17:34
Oh fallait pas, c'est trop gentil. Je le prends aussi, on ne sait jamais =)
0