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 :

ajouter des lignes qd elles n'existent pas


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut ajouter des lignes qd elles n'existent pas
    Bonjour.
    je cherche une moyen simple pour ajouter à un fichier F les lignes d'un fichier f si seulement elles n'existent pas deja dans F.

    comment faire pour parcourir le fichier F le minimum de fois possible?


    Merci

  2. #2
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Existe-t-il un critère (champ avec séparateur sur une position donnée) qui permet de comparer les lignes des fichers F et F ?
    Ou faut-il comparer l'integralité de chaque ligne ?

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    non, pas de critere particulier.. c toute la ligne
    il ya juste que si on trouve une ligne commune, c'est que le fichier a deja été copié.. donc plus besoin de le parcourir (d'ou le Flag que je mets dans mon code)


    en fait, j'ai une liste de fichiers que je dois merger dans un fichier final, avec la condition que je venais de décrire ..

    voici mon code que j'essaie de debugguer et que je suis convaincu qu'on peut mieux faire..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    cd $MyFolder
    OUTPUT=mon_fichier.txt
    flag=0
     
    c_list=`ls *.dat`
     
    for fichier in $c_list
    do
       # créer le fichier final s'il n'existe pas
    	if [[ ! -e $OUTPUT ]]
    	then
    		echo "" > $OUTPUT
    	fi
     
    	while read ligne
    		do
    		if test "`grep -e $ligne $fichier`" != ""
    		then
    			flag=1
                            exit
    		fi
    	done < $OUTPUT
     
    	if [[ flag -eq 0 ]] ; then
    		grep -e'$' $fichier >> $TEMP_OUTPUT
    	fi
    done
     
    cp $TEMP_OUTPUT $OUTPUT

    deja faut il que ca marche

  4. #4
    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 262
    Points
    12 262
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ligne=$0
    grep -v $ligne fichier
    if [ $? -eq 0 ] ; then echo $ligne >> fichier ; else echo INUTILE ; fi

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    non ca ne marche pas..

    j'utilise ce code pour le moment :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    c_list=`ls *.dat*`
    flag=0
    TEMP=temp.txt
    OUTPUT=final.txt
     
    for fichier in $c_list
    do
    #je cree le fichier OUTPUT sil existe pas
    	if [[ ! -e $OUTPUT ]]
    	then
    		echo "" > $OUTPUT
    	fi
     
    	while read ligne
    		do
    		grep -v "$ligne" $fichier >> $TEMP
    		if [ $? -eq 0 ] ; then
    			flag=1
    			break
    		fi
    	done < $OUTPUT
     
    	if [[ flag -eq 0 ]] ; then
    		echo on copie
    		grep -e'$' $fichier >> $TEMP
    		cp $TEMP $OUTPUT
    	fi
     
    rm $TEMP
     
    done
    j'ai toujours mon $OUTPUT vide à la fin.. qqn peut ti m'expliquer pourquoi??
    Merci

Discussions similaires

  1. Ajouter une div si elle n'existe pas
    Par beegees dans le forum jQuery
    Réponses: 6
    Dernier message: 15/06/2011, 09h23
  2. [XL-2010] Ajouter une feuille si elle n'existe pas
    Par PhaleneCAD dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/02/2011, 20h53
  3. Ajouter une ligne si elle n'existe pas dans la table
    Par daimadoshi dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/11/2010, 15h52
  4. Je n'arrive pas à ajouter des ligne à ma BD ACCESS
    Par dlefebvre dans le forum VB.NET
    Réponses: 8
    Dernier message: 10/12/2009, 19h57
  5. Pas d'ajout des lignes avec BULK INSERT
    Par beurknbba dans le forum Développement
    Réponses: 2
    Dernier message: 04/09/2009, 10h28

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