insertion de lignes dans une collection de fichiers unix

insertion de lignes dans une collection de fichiers unix - Shell/Batch - Programmation

Marsh Posté le 21-10-2005 à 14:52:37    

Bonjour,
Je dois insérer quatre lignes dans des fichiers texte sur une machine unix,
à partir de la ligne 89 dans chaque fichier. Je  
sais faire ça en vb mais en shell je suis sec. Quelqu'un peut-il me donner une piste?

Reply

Marsh Posté le 21-10-2005 à 14:52:37   

Reply

Marsh Posté le 21-10-2005 à 14:54:48    

awk

Reply

Marsh Posté le 21-10-2005 à 15:02:12    

on peut travailler sur les lignes d'un fichier texte avec awk? insérer plusieurs lignes données à un endroit donné (ex: ligne 89) de façon automatique?

Reply

Marsh Posté le 21-10-2005 à 15:09:47    

Il faut réécrire chaque fichier dans un fichier temporaire, puis le renommer pour écraser le fichier d'origine avec le fichier modifié.
Il n'y a pas de moyen de faire ça en une seule passe.
 
Avec awk il te suffit de faire une boucle jusqu'à ce qu'un compteur de ligne atteigne 89, puis tu insères tes quatre lignes, puis tu reprends la réécriture jusqu'à la fin du fichier.
 
Ca donne grosso modo un truc du genre :
 

#! /bin/ksh
 
awk 'BEGIN { ligne = 0 } {  
if ( ligne == 89 )  
# écrire ici les quatres lignes à ajouter
 
print $0;
ligne++; }' ton_fichier.txt > ton_fichier.txt.tmp
 
mv ton_fichier.txt.tmp ton_fichier.txt
 


 
 
Je ne t'ai donné que la base, il faut ajouter la boucle qui va bien autour du awk pour parcourir ta liste de fichiers.


Message édité par Elmoricq le 21-10-2005 à 15:10:29
Reply

Marsh Posté le 21-10-2005 à 17:25:24    

Pas besoin de compteur, tu peux utiliser NR. Par exemple, tu veux ajouter deux lignes entre les lignes 1 et 2 :

awk 'NR == 2 { print "abc"; print "def" } { print }' ton_fichier

Reply

Marsh Posté le 21-10-2005 à 17:26:56    

Ah ben oui, je le cherchais y a pas longtemps et je l'ai pas trouvé, alors qu'il est juste en dessous de NF dans la manpage [:pingouino]

Reply

Marsh Posté le 22-10-2005 à 15:14:34    

MERCI!!

Reply

Sujets relatifs:

Leave a Replay

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