Suppression d'un bloc de lignes recurssif

Résolu/Fermé
gogo - 2 févr. 2009 à 15:38
 gogo - 3 févr. 2009 à 09:49
Bonjour,
voila j'ai un fichier avec des blocs de 72 lignes
exemple :

1:debut
2:gfs
3:hfds
4:hfds
.....
....
69:gdsq
70:gdsq
71:gqsd
72 :fin
73:debut
74:gfs
75:hfds
76:hfds
.....
....
140:gdsq
142:gdsq
143:gqsd
144 :fin
145:debut
146:gfs
147:hfds
148:hfds
.....
....
213:gdsq
214:gdsq
215:gqsd
216:fin
....
....
je voudrai savoir comment je peux supprimer les lignes '57 a 69' du premier bloc et les lignes '114 a 126' du deuxieme bloc et les lignes '171 a 183' .... avec la commande sed ou autre jusqu'a fin de fichier

merci d'avance
A voir également:

7 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
2 févr. 2009 à 19:08
Salut,

Avec un truc du genre :
sed '57~57 s/.*/DEBUT&/; 69~57 s/.*/FIN&/' fichier | sed '/DEBUT/,/FIN/d'
C'est pas très académique, mais ça marche ;-))
0
bonjour jipicy

ben ca ne marche pas, mon but est de supprimer les lignes de 57 à 69 d'un bloc de 72 lignes dans un fichier de presque 1000000 de lignes

alors je cherche un truc du genre boucle "for / sed / i,j incremental de 57 ".

merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
3 févr. 2009 à 09:06
Bon on va essayer avec un exemple.

Soit un fichier de 50 lignes. Supprimer les lignes 4 à 6 d'un bloc de 12 lignes :
jp@MDK:~/tmpfs ssh$ cat fich
1debut bloc
2
3
4a supprimer
5a supprimer
6a supprimer
7
8
9
10
11
12fin bloc
13debut bloc
14
15
16a supprimer
17a supprimer
18a supprimer
19
20
21
22
23
24fin bloc
25debut bloc
26
27
28a supprimer
29a supprimer
30a supprimer
31
32
33
34
35
36fin bloc
37debut bloc
38
39
40a supprimer
41a supprimer
42a supprimer
43
44
45
46
47
48fin bloc
49debut bloc
50
jp@MDK:~/tmpfs ssh$ sed '4~12 s/.*/DEBUT&/;6~12 s/.*/FIN&/' fich  | sed '/DEBUT/,/FIN/d'
1debut bloc
2
3
7
8
9
10
11
12fin bloc
13debut bloc
14
15
19
20
21
22
23
24fin bloc
25debut bloc
26
27
31
32
33
34
35
36fin bloc
37debut bloc
38
39
43
44
45
46
47
48fin bloc
49debut bloc
50
jp@MDK:~/tmpfs ssh$
Ça le fait, non ?
0
re

ben je vois bien que ca le fait mais avec mon fichier c'est pas le cas,je travaille sous UNIX je ne sais pas pourquoi ca marche pas

"&/ is not a recognized function."

au faite les lignes a supprimer sont des sauts de lignes '^M' y'en a plein mais je veux seulement supprimer ceux de la ligne 57 à 69

car je peux les supprimer toutes en meme temps mais je veux seulement ceux de la fin cad 'de 57 à 69'

je ne sais pas si tu me comprends ??

merci encore une fois
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
3 févr. 2009 à 09:25
"&/ is not a recognized function."
Vu que c'est des lignes vides, à ce moment là supprime le "&" de l'expression (s/.*/DEBUT/)...

au faite les lignes a supprimer sont des sauts de lignes '^M' y'en a plein mais je veux seulement supprimer ceux de la ligne 57 à 69
Est-ce que c'est les seules lignes vides consécutives de ton fichier ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kif kif

maintenant c "/ is not a recognized function."
0
normalement c'est OK

sed '/57~12/d'
car de 57 à 69 ya 12 lignes


merci encore une fois ;)
0
Utilisateur anonyme
2 févr. 2009 à 16:42
Bonjour,
avec vi

:57,69d

puis
:114,126d

et enfin
:171,183d

++
Poulpoul
-1