IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

ReFormatage d'un fichier csv : (awk ?)(resolu avec sed)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut ReFormatage d'un fichier csv : (awk ?)(resolu avec sed)
    Hello la compagnie

    Sous linux redhat 7.3 j'ai le fichier "csv" suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    VAL1;   AB ; Decription 1
    VAL2;   0  ; Decription 2
    VAL3;  1AB ; Decription 3
    VAL4; RX003; Decription 4
    VAL5; 13AB ; Decription 5
    VAL6;  11  ; Decription 6
    j'ai besoin de le reformater avec le 2eme champs paddé à gauche sur 5 caractères avec des "0" (mon problème est que ma zone est alpha numérique et pas pure "numerique" sans quoi no soucaille avec awk )
    ce qui donnerait le resultat ci-apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    VAL1;000AB; Decription 1
    VAL2;00000; Decription 2
    VAL3;001AB; Decription 3
    VAL4;RX003; Decription 4
    VAL6;00011; Decription 6
    je suis loin de maitriser toutes les subtilités de awk, aussi, si vous avez une soluce à me proposer je vous en remercie par avance
    @Argoet

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Tu veux donc transformer un fichier mal formaté pour un fichier pire ?

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    et pour les traitements ultérieurs, il faudra supprimer les zéros non significatifs, qui précèdent les données ?


    NB: un fichier de données doit ne contenir aucun formatage.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    Bonjour. Je doit avouer que ces réponses n'était pas celles attendues.😥 (Je pensais a tord que la bienveillance faisait partie de ce forum)
    Si je comprends bien vous ne savez pas répondre à ma problématique.
    Dommage . Il aurait été préférable de s'abstenir dans ce cas 😥

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    peut-être qu'on ne se rend plus compte à force; là, je nous trouve plutôt sympa.

    donc, awk, oui : c'est plus simple pour traiter des champs.
    mais il n'y a rien d'automatique, il va falloir connaître le nombre de caractères du deuxième champs après en avoir supprimer les espaces, et faire une petite boucle d'autant de tours pour construire la chaîne de 0 nécessaires...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 12
    Par défaut
    Bonjour. Comme la modification de chaque ligne du fichier n'a pas d'influence sur les autre lignes, je propose un script à base de sed.
    Principe: D'abord isoler le CHAMP à modifier (après le 1er ';' et en otant les espaces du début et de fin)
    puis calculer le nombre de '0' à mettre dans le PREFIX
    enfin remplacer dans la ligne le CHAMP et ses espaces par le PREFIX et le CHAMP
    Cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while read LIGNE ; do
        CHAMP="$(sed -e "s/^[^;]*; *//" -e "s/ *;[^;]*$//" <<<${LIGNE})"
        PREFIX=""
        for I in $(seq ${#CHAMP} 4) ; do
    	PREFIX="${PREFIX}0"
        done
        echo "$(sed -e "s/; *${CHAMP} */;${PREFIX}${CHAMP}/" <<<${LIGNE})"
    done
    On doit pouvoir faire plus simple, mais ceci semble fonctionner.

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Citation Envoyé par argoet Voir le message
    (Je pensais a tord que la bienveillance faisait partie de ce forum)
    Lorsque quelqu'un demande comment assassiner, la bienveillance n'est pas de fournir le couteau.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Awk: afficher le champ x dans un fichier CSV.
    Par vandman dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 07/11/2014, 00h44
  2. Awk: récupérer les variables dans un fichier csv.
    Par vandman dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 04/11/2014, 09h20
  3. transformer un fichier csv en un autre avec awk
    Par nizartl dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 28/01/2011, 16h02
  4. [bash] utilisation de CAT/AWK pour parser un fichier CSV
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 32
    Dernier message: 25/07/2007, 23h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo