Commande pour tronquer dans un CSV

Résolu
Domcallaghan Messages postés 15 Statut Membre -  
Domcallaghan Messages postés 15 Statut Membre -
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.

4 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  2. Domcallaghan Messages postés 15 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      $ 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
  3. Utilisateur anonyme
     
    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
  4. Domcallaghan Messages postés 15 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      De rien ;-))

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

      sed 's/\([^;]*\)\(;[^;]\{50\}\)[^;]*\.*/\1\2/' plop
      0
    2. Domcallaghan Messages postés 15 Statut Membre
       
      Oh fallait pas, c'est trop gentil. Je le prends aussi, on ne sait jamais =)
      0