Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2008, 21h15   #1
Membre du Club
 
Inscription : septembre 2006
Messages : 339
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 339
Points : 47
Points : 47
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
freestyler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 21h54   #2
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
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 ?
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 22h03   #3
Membre du Club
 
Inscription : septembre 2006
Messages : 339
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 339
Points : 47
Points : 47
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 :
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
freestyler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 07h44   #4
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 546
Points : 7 776
Points : 7 776
Code :
1
2
3
ligne=$0
grep -v $ligne fichier
if [ $? -eq 0 ] ; then echo $ligne >> fichier ; else echo INUTILE ; fi
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 15h28   #5
Membre du Club
 
Inscription : septembre 2006
Messages : 339
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 339
Points : 47
Points : 47
non ca ne marche pas..

j'utilise ce code pour le moment :


Code :
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
freestyler est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h06.


 
 
 
 
Partenaires

Hébergement Web