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

Linux Discussion :

Manipuler un fichier


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 22
    Points
    22
    Par défaut Manipuler un fichier
    Bonjour,

    je souhaite creer un fichier à partir d'un autre, à l'aide d'un shell.

    mon fichier source contient des lignes sous cette forme :
    4:5:6:3:1:2:7:8:9

    je veux traiter chaque ligne pour obtenir :
    1;2;3;4;5;7;8;9

    j'ai donc fait la boucle suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cat fichier.txt | while read ligne
    do
    echo $ligne | cut -d':' -f4
    echo $ligne | cut -d':' -f5
    echo $ligne | cut -d':' -f3
    echo $ligne | cut -d':' -f1
    echo $ligne | cut -d':' -f2
    echo $ligne | cut -d':' -f7
    echo $ligne | cut -d':' -f8
    echo $ligne | cut -d':' -f9
    done
    j'obtiens :
    pour un fichier avec 2 lignes
    1
    2
    3
    4
    5
    7
    8
    9

    1
    2
    3
    4
    5
    7
    8
    9


    Comment faire pour garder les données en ligne, c'est à dire
    1;2;3;4;5;7;8;9
    1;2;3;4;5;7;8;9


    merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 470
    Points
    19 470
    Par défaut
    Bonjour,

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    while read line; do line=$(sort <<<"${line//:/$'\n'}" | tr $'\n' ';'); echo "${line%%;}"; done <tonFichier
    ou, avec un tableau en jouant sur l'IFS :
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    while read line; do Line=( $(sort <<<"${line//:/$'\n'}") ); oIFS="$IFS"; IFS=':'; echo "${Line[*]}"; IFS="$oIFS"; done < tonFichier

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Points : 426
    Points
    426
    Par défaut wahou
    N_BaH, je garde ces deux lignes dans un coin parce qu'elles mettent en oeuvre pas mal de bashisms intéressants . Je me demande si ça marche à l'identique en ksh...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    Merci, ça va m'aider.

    je m'aperçois que je me suis mal exprimé.

    En fait, mon fichier ne contient pas forcement des nombres (j'ai pris un mauvais exemple)

    Mon fichier est en fait des coordonnées :

    15:BD du marechal:22021968arislombier:60:K:40:80
    01:rue du palais:01081950:Toulouselatrier:100:A:70:200

    je souhaite avoir :

    Paris;Plombier;22021968;15;BD du marechal;K;40;80
    Toulouse;Platrier;01081950;01;rue du palais;A;70;200


    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read line; do line=$(sort <<<"${line//:/$'\n'}" | tr $'\n' ';'); echo "${line%%;}"; done <tonFichier
    j'ai

    15;22021968;40;60;80;BD du marechal;K;Paris;Plombier
    01;01081950;100;200;70;K;Platrier;Toulouse;rue du palais

    j'ai donc enlever le sort et remis le cut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while read ligne
    do
    echo $ligne | cut -d':' -f4 | tr $'\n' ';'
    echo $ligne | cut -d':' -f5 | tr $'\n' ';'
    echo $ligne | cut -d':' -f3 | tr $'\n' ';'
    echo $ligne | cut -d':' -f1 | tr $'\n' ';'
    echo $ligne | cut -d':' -f2 | tr $'\n' ';'
    echo $ligne | cut -d':' -f7 | tr $'\n' ';'
    echo $ligne | cut -d':' -f8 | tr $'\n' ';'
    echo $ligne | cut -d':' -f9 | tr $'\n' ';'
    done < mon_fichier.txt >> fs.txt

    j'obtiens bien l'ordre voulu, mais tout sur la meme ligne

    Paris;Plombier;22021968;15;BD du marechal;K;40;80;Toulouse;Platrier;01081950;01;rue du palais;K;70;200;

    je n'arrive pas à obtenir mes 2 lignes.

    Avez vous une idée ?

    Merci

  5. #5
    Membre habitué Avatar de nowahn
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 84
    Points : 150
    Points
    150
    Par défaut
    Bonjour,

    Il te suffit de rajouter un echo à la fin du corps de ta boucle:
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while read ligne
    do
    echo $ligne | cut -d':' -f4 | tr $'\n' ';'
    [...]
    echo $ligne | cut -d':' -f9 | tr $'\n' ';'
    echo
    done < mon_fichier.txt >> fs.txt

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 470
    Points
    19 470
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ while IFS=':' read no voie tel ville metier nb reste ; do echo "$ville;$metier;$tel;$no;$voie;${reste//:/;}"; done < tonFichier 
    Paris;Plombier;22021968;15;BD du marechal;K;40;80
    Toulouse;Platrier;01081950;01;rue du palais;A;70;200

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    tout simplement

    merci

  8. #8
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Cependant, awk me semble le plus indiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F: 'BEGIN {OFS=";"} {print $4,$5,$3,$1,$2,$7,$8,$9;}' tonFichier

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

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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