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
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
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 ?
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
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
non ca ne marche pas..
j'utilise ce code pour le moment :
j'ai toujours mon $OUTPUT vide à la fin.. qqn peut ti m'expliquer pourquoi??
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
Merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager