substitue une valeur par une autre a deux reprise (sed?)

substitue une valeur par une autre a deux reprise (sed?) - Shell/Batch - Programmation

Marsh Posté le 14-12-2002 à 21:02:18    

Salut a tous,
 
J'expose ma requete:
J'ai un fichier texte (fichier1), suposons qu'il contienne juste la lettre "a".
J'ai un autre fichier texte (fichier2) qui contient "a  b".
J'ai un troisieme et dernier fichier qui contient "b  c".
 
Je cheche a faire un script qui me donne un fichier final qui contiendrait :
 
a  b  c
 
(L'exemple a l'air simple, mais bon mes 3 fichiers contiennent plusieurs dixaines de millier lignes chacun).
 
Je pense qu'il existe peut etre mieux qu'un script de plusieurs millier de ligne en sed s/a/b/g | sed s/b/c/g > fichier4 ou autre chose je sais pas ... je suis pas programmeur a la base  :pfff:  
 
Merci pour votre aide.

Reply

Marsh Posté le 14-12-2002 à 21:02:18   

Reply

Marsh Posté le 14-12-2002 à 22:36:05    

tabasko a écrit :

Salut a tous,
 
J'expose ma requete:
J'ai un fichier texte (fichier1), suposons qu'il contienne juste la lettre "a".
J'ai un autre fichier texte (fichier2) qui contient "a  b".
J'ai un troisieme et dernier fichier qui contient "b  c".
 
Je cheche a faire un script qui me donne un fichier final qui contiendrait :
 
a  b  c
 
(L'exemple a l'air simple, mais bon mes 3 fichiers contiennent plusieurs dixaines de millier lignes chacun).
 
Je pense qu'il existe peut etre mieux qu'un script de plusieurs millier de ligne en sed s/a/b/g | sed s/b/c/g > fichier4 ou autre chose je sais pas ... je suis pas programmeur a la base  :pfff:  
 
Merci pour votre aide.


 
 
je propose une solution tres simple sans sed....
 


kneko@linux:~/test> mkdir test
kneko@linux:~/test> cd test
kneko@linux:~/test/test> cat > ab`date +"%Y%m%d"`
f
f
f
au
f
f
f
kneko@linux:~/test/test> cat > ac`date +"%Y%m%d"`
d
d
bu
d
kneko@linux:~/test/test> cat > ad`date +"%Y%m%d"`
cv
cv
cu
cv
fsdf
kneko@linux:~/test/test> cat > `date +"%Y%m%d"`.sh
#!/bin/sh
LOG=`date +"%Y%m%d-%h%m"`
grep au *20021214 > $LOG
grep bu *20021214 >> $LOG
grep cu *20021214 >> $LOG
more $LOG | cut -d':' -f2 > $LOG
ls -l
more $LOG
yes | rm -f $LOG
exit 0
kneko@linux:~/test/test> chmod 744 `date +"%Y%m%d"`.sh
kneko@linux:~/test/test> ll
?? 16
-rwxr--r--    1 kneko    users         169 12? 14 22:30 20021214.sh
-rw-r--r--    1 kneko    users          15 12? 14 22:24 ab20021214
-rw-r--r--    1 kneko    users           9 12? 14 22:25 ac20021214
-rw-r--r--    1 kneko    users          17 12? 14 22:25 ad20021214
kneko@linux:~/test/test> ./20021214.sh
 
?? 20
-rw-r--r--    1 kneko    users           9 12? 14 22:31 20021214-12?12
-rwxr--r--    1 kneko    users         169 12? 14 22:30 20021214.sh
-rw-r--r--    1 kneko    users          15 12? 14 22:24 ab20021214
-rw-r--r--    1 kneko    users           9 12? 14 22:25 ac20021214
-rw-r--r--    1 kneko    users          17 12? 14 22:25 ad20021214
au
bu
cu
kneko@linux:~/test/test> cd ..
kneko@linux:~/test> rm -r test


 
comment ca marche ?
 
grep XXXX DANS_FICHIERS > LOG    
groupe que les lignes contenant XXXX dans le fichier LOG
 
ensuite je coupe (CUT) les colones inutiles ici ce qui est avant le ':' et le ':' lui meme
 
si XXXX est coince dans une phrase logique exemple
 
nnnnnnnnnnn:XXXX,vvvvvvvvvvvv
 
en faisant 2 cuts un pour eliminer le debut (ici les 'n';) et un deuxieme pour virer la fin (ici les 'v';), tu obtients que les XXXX
 
bref en plus de ca... tu copie ton resultat dans le meme fichier log puisque les anciennes infos ne te sont plus utiles, tu affiche le resultat.
 
et pour finir tu efface le fichier log pour pas laisser de traces et donc etre bien propre...
 
dans ton cas genere le fichier log mais ne l'efface pas ....
puisque tu veux un fichier4....
 
 
 


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 14-12-2002 à 22:39:55    

dans ton cas
 
fichiers  
"a"
"a b"
"b c"
 
le deuxieme a doit etre coupe
le second b de meme
....
 
je pense que maintenant tu as tout pour reussir ton script
je te conseille de relire les man cut, et bash (paragraphes des redirections)....
 
pour une manipulation de chaines si simple inutile de faire appel a sed....
 
ceci dit sed saurrait le faire mais bon je maitrise pas trop sed....


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 14-12-2002 à 22:43:32    

salut,
 
merci pour ta reponse.
enfait c'est un peu plus compliqué :)
 
mon fichier1 contient 150'0000
mon fichier2 en contient 40'000
mon fichier3 en contient 800
 
c'est surtout de la que vient mon probleme ...

Reply

Marsh Posté le 14-12-2002 à 22:51:44    

tabasko a écrit :

salut,
 
merci pour ta reponse.
enfait c'est un peu plus compliqué :)
 
mon fichier1 contient 150'0000
mon fichier2 en contient 40'000
mon fichier3 en contient 800
 
c'est surtout de la que vient mon probleme ...


 
ET alors ???
 
le traitement va prendre plus de temps c tout...
 
par contre si tu extrait tes infos de fichiers non structurees type mots dans 3 courriers c'est plus galere mais la methode est a meme...
 
par contre si c'est des fichier structure c'est tres simple a adapter...
 
exemple de fichier structure
2002 10 12 : ventre : 10000 : PU : 123.32
2002 11 12 : ventre : 11111 : pu : 132.23
 
enfin bref des fichier dont les paragraphes sont tous les meme dans la forme....
 
la des cuts et grep suffisent a selectionner les information utiles....
 
j'essaye d'etre clair, mais bon il faut quand meme un minimu de tehorie barbante a lire...
les man pages...  j':love: les man pages....


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 14-12-2002 à 22:59:03    

je suis plutot perdu, j'ai meme du mal a pigr l'exemple illustratif que tu as eu la gentillesse de me faire, c'est pas du tout mon rayon, mais ca me fait reflechir ...
et je suis un lutteur  :D  

Reply

Marsh Posté le 14-12-2002 à 23:11:55    

tabasko a écrit :

je suis plutot perdu, j'ai meme du mal a pigr l'exemple illustratif que tu as eu la gentillesse de me faire, c'est pas du tout mon rayon, mais ca me fait reflechir ...
et je suis un lutteur  :D  
 


 
ben la je peux pas faire beaucoup plus simple comme exemple...
l'exemple est directement inspire du probleme que tu as decrit...c'est pour ca...sauf qu'il a fallu generer 3 fichiers bidons pour ecrire un script exemple....
 
mais te laisse pas perturber par les noms de fichiers s'appelant $DATE  
 
ou par les lignes ou je genere les fichiers c'est le script qui compte enfin sa forme....
 
avec un peu de methode et de patience et surtout de lecture des man pages tu vas arriver a faire un truc similaire pour tes fichiers...


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 14-12-2002 à 23:20:56    

bon je progresse, je comprend ce que tu veux faire ... c'est deja ca  :lol:  
 
alors j'ai des questions supplementaires qui me viennent.
 
le resultat de mon premier grep, je voudrai le rajouter sur la ligne de mon fichier1.
 
si j'ai compris correctement je devrais le faire avec un cut ?
mais comment le script va savoir ou me le placer...
 
putain merde, pourquoi suis je aussi c..  :(

Reply

Marsh Posté le 14-12-2002 à 23:24:12    

et chaque grep d'une ligne a une autre de mon fichier1 ... la commande doit integrer une variable ...
 
je ferai mieux de faire autre chose, je vais me pendre la ...
 
 
 
grep aaaa fichier1
aaaa bbbb
comment je prend ce resultat pour l'inscrire dans mon fichier1
 
aaaa est une variable d'une ligne a une autre, comment dois je le scripter (awk ?)

Reply

Marsh Posté le 15-12-2002 à 01:45:48    

je viens de tomber su la commande JOIN
 
join - join lines of two files on a common field
 
c'est pas mortel ca :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed