des remplacements dans des fichiers unix

des remplacements dans des fichiers unix - Shell/Batch - Programmation

Marsh Posté le 30-01-2008 à 07:55:25    

Bonjour,
Je dois effacer des nombres dans 86 fichiers .lst (c'est à dire texte). J'ai 106 nombres à effacer avec un script shell unix.
Par exemple , l'un des 86 fichiers contient:
35
56
89
25469
30258
26255
.......
et je dois effacer 56 et 89 et 26255, qui sont dans mon fichier des nombres à effacer.
Je vois bien qu'il faut faire deux boucles imbriquées mais je suis null en shell. Si quelqu'un pouvait m'aiguiller?
Merci.

Reply

Marsh Posté le 30-01-2008 à 07:55:25   

Reply

Marsh Posté le 30-01-2008 à 11:09:25    

Par exemple :

awk 'BEGIN { x[56]; x[89]; x[26255] } { if (!($0 in x)) print }'


Le bloc BEGIN définit un hash dont les clées sont les nombres à éliminer. Par chaque ligne, on affiche la ligne seulement si elle n'est pas dans le hash.

Reply

Marsh Posté le 30-01-2008 à 13:50:50    

Ou bien avec

grep -v ^56 fic_in | grep -v ^89 |grep -v ^26255 >fic_out

L'option -v retient toutes les lignes sauf celles qui contiennent la chaine recherchée. Cette dernière commence par un accent circonflexe pour indiqué que le pattern se trouve en début de ligne.


Message édité par olivthill le 30-01-2008 à 13:51:50
Reply

Marsh Posté le 31-01-2008 à 13:47:19    

OK merci. ça marche.:)

Reply

Marsh Posté le 31-01-2008 à 18:50:22    

Une autre solution inspirée de celle de matafan

awk 'NR==FNR {ex[$0]++; next} !ex[$0]' exlude.dat file_in > file_out


Le fichier exclude.dat contient la liste des nombres à ignorer.
 
Jean-Pierre.

Reply

Sujets relatifs:

Leave a Replay

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