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 :

Concaténer des fichiers de lignes


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Points : 133
    Points
    133
    Par défaut Concaténer des fichiers de lignes
    Bonjour,
    j'ai un petit souci en concaténant mes fichiers dont certains sont vides,
    mes fichiers contiennent une seule ligne, j'aurai en sortie que les fichiers non vides
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo " " >  texte
    	for i in $liste
    	do  
    	cat $i.txt | tr -d \n >> texte
    	done
    par exemple je veux avoir le contenu de ces trois fichiers dont fich2 est vide
    cat fich1
    toto
    cat fich2
    cat fich3
    tuto
    cat fich1 fich2 fich3
    toto

    tuto
    Merci

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    pour n'avoir en sortie que les fichiers non-vide il suffit de tester le fichier avant de l'inclure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in * ; do if [ -s $i ] ; then cat $i | tr -d \n >> texte ; fi ; done

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Points : 133
    Points
    133
    Par défaut
    non j'ai besoin des fichiers vides et non vide,

  4. #4
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,
    Citation Envoyé par AJ_ing Voir le message
    non j'ai besoin des fichiers vides et non vide,
    Alors où est ton problème ???
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Points : 133
    Points
    133
    Par défaut
    Alors où est ton problème ??
    j'ai que les fichiers plein j'ai pas de ligne vide en fichier de sortie

  6. #6
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Attention, un fichier vide (touch fichier) est vraiment vide et ne renvoie rien, alors qu'un fichier apparemment vide (echo "" > fichier) semble vide mais contient en réalité une ligne vide, ce qui n'est pas pareil.

    Donc si tes fichiers sont réellement vides, c'est normal qu'ils ne renvoient aucune ligne vide
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #7
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Attention, un fichier vide (touch fichier) est vraiment vide et ne renvoie rien, alors qu'un fichier apparemment vide (echo "" > fichier) semble vide mais contient en réalité une ligne vide, ce qui n'est pas pareil.

    Donc si tes fichiers sont réellement vides, c'est normal qu'ils ne renvoient aucune ligne vide
    du coup tu peux donc faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in * ; do if [ -s $i ] ; then echo >> texte ; else cat $i | tr -d \n >> texte ; fi ; done
    et tu auras tes lignes vides
    apres il te reste plus que ta mise en page à ajouter pour titrer les lignes pour chaque fichier...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Points : 133
    Points
    133
    Par défaut
    j'ai déjà essayé ça ,avec if et else j'ai même résultat, rien ne s'ajoute à mon fichier sortie
    bon la remarque de " zipe31" est intéressante , j'essaye de voir d’où vient le problème

  9. #9
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    On crée 3 fichiers avec une redirection de la commande "echo"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ echo toto > f1
     
    $ echo "titi" > f2
     
    $ echo "" > f3
    Puis un crée un fichier avec la commande "touch"
    On compare leur taille (on voit bien que seul "f4" est réellement vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ du -sh *
    4,0K	f1
    4,0K	f2
    4,0K	f3
    0	f4
    On concatène un fichier contenant du texte (f1) avec un fichier apparemment vide (f2) puis un fichier contenant du texte (f3). On a bien un ligne vide entre les deux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat f1 f3 f2
    toto
     
    titi
    On refait la même chose mais avec le fichier vide (f4) entre les deux. Là on n'a pas d'espace entre les 2 fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ cat f1 f4 f2
    toto
    titi
    $ man woman
    Il n'y a pas de page de manuel pour woman.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ echo "toto" >fich1
    $ echo "titi" >fich3
    $ >fich2
    $ test -f text && rm text
    $ for f in fich*; do test -s "$f" && tr -d '\n' <"$f" >>text || echo -n " " >>text; done
    $ cat text
    toto titi$
    EDIT:

    par contre, ça ne fonctionne pas si fich2 contient une ligne vide (i.e. un simple \n)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ echo "toto" >fich1
    $ echo "titi" >fich3
    $ echo "" >fich2
    $ test -f text && rm text
    $ for f in fich*; do test -s "$f" && tr -d '\n' <"$f" >>text || echo -n " " >>text; done
    $ cat text
    tototiti$

    mais, étant donné que les fichiers ne doivent jamais contenir plus d'une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo "toto" >fich1
    $ echo "" >fich2
    $ echo "titi" >fich3
    $ for f in fich*; do read l <"$f"; echo -n "${l:- }"; done; echo
    toto titi
    $ >fich2
    $ for f in fich*; do read l <"$f"; echo -n "${l:- }"; done; echo
    toto titi
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Concaténer des fichiers words
    Par tomtom09 dans le forum Word
    Réponses: 1
    Dernier message: 17/09/2008, 17h23
  2. Cherche MODULE pour concaténer des fichiers PDF
    Par DevPerl dans le forum Modules
    Réponses: 1
    Dernier message: 21/10/2007, 17h11
  3. Concaténer des fichiers textes
    Par nasbe26 dans le forum VBScript
    Réponses: 1
    Dernier message: 18/09/2007, 14h41
  4. application pour concaténer des fichiers word.
    Par phoenixatareva dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 05/04/2007, 10h55
  5. Réponses: 11
    Dernier message: 02/11/2006, 16h50

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