|
|
|
|
||||||
| fr.comp.os.unix Système UNIX. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour
Comment puis-je, dans un fichier texte, supprimer automatiquement une ligne si elle contient l'expression 'toto' ? merci ps : c'est un gros fichier (3Go) |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Le 26-02-2007, kevin <nomail@valid.invalid> a écrit:
> Comment puis-je, dans un fichier texte, supprimer automatiquement une ligne > si elle contient l'expression 'toto' ? grep -v > ps : c'est un gros fichier (3Go) Faut prendre son temps... Plus sérieusement, ça dépend si tu as 3Go de libre ou pas. Si tu as 3Go de libre: grep -v toto GrosFichier > GrosFichierSansToto Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois) |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
2007-02-26, 15:48(+00), Marc Boyer:
> Le 26-02-2007, kevin <nomail@valid.invalid> a écrit: >> Comment puis-je, dans un fichier texte, supprimer automatiquement une ligne >> si elle contient l'expression 'toto' ? > > grep -v > >> ps : c'est un gros fichier (3Go) > > Faut prendre son temps... > Plus sérieusement, ça dépend si tu as 3Go de libre ou pas. > Si tu as 3Go de libre: > grep -v toto GrosFichier > GrosFichierSansToto Et sinon: perl -ne 'print unless /toto/; END{truncate STDOUT, tell STDOUT} ' < GrosFichier 1<> GrosFichier -- Stéphane |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Stephane Chazelas sur fr.comp.os.unix le mardi 27 février 2007 12:01
> 2007-02-26, 15:48(+00), Marc Boyer: >> Le 26-02-2007, kevin <nomail@valid.invalid> a écrit: >>> Comment puis-je, dans un fichier texte, supprimer automatiquement une >>> ligne si elle contient l'expression 'toto' ? >> >> grep -v >> >>> ps : c'est un gros fichier (3Go) >> >> Faut prendre son temps... >> Plus sérieusement, ça dépend si tu as 3Go de libre ou pas. >> Si tu as 3Go de libre: >> grep -v toto GrosFichier > GrosFichierSansToto > > Et sinon: > > perl -ne 'print unless /toto/; > END{truncate STDOUT, tell STDOUT} > ' < GrosFichier 1<> GrosFichier > merci à vous deux |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
* Stephane Chazelas [2007.02.27 11:01]:
> perl -ne 'print unless /toto/; > END{truncate STDOUT, tell STDOUT} > ' < GrosFichier 1<> GrosFichier Si je comprend bien, on utilise "1<>" plutôt que ">" pour éviter que "GrosFichier" soit tronqué avant que la lecture ne commence. Mais est-ce que ça marche seulement dans le cas particulier où on retranche des lignes? Peut-on toujours être sûr que la lecture précède l'écriture? -- JR |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
2007-03-02, 09:10(-06), Jean-Rene David:
> * Stephane Chazelas [2007.02.27 11:01]: >> perl -ne 'print unless /toto/; >> END{truncate STDOUT, tell STDOUT} >> ' < GrosFichier 1<> GrosFichier > > Si je comprend bien, on utilise "1<>" plutôt que ">" pour > éviter que "GrosFichier" soit tronqué avant que la lecture > ne commence. > > Mais est-ce que ça marche seulement dans le cas particulier > où on retranche des lignes? Peut-on toujours être sûr que la > lecture précède l'écriture? Oui, ca ne marche seulement que quand ce qu'on ecrit est moins gros que ce qu'on lit (ou aussi gros). On pourra s'en tirer toutefois dans le cas contraire si le fichier est moins gros que ce que perl lit en un coup (probablement une page souvent 4096 octets). -- Stéphane |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
Jean-Rene David wrote in message
<slrneugfj0.8r1.jrdavid@princo.homelinux.org>: > Peut-on toujours être sûr que la > lecture précède l'écriture? Si ce qui est écrit dépend de ce qui est lu, il y a des chances, oui, à moins d'avoir inventé le programme à remonter le temps. |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
* Nicolas George [2007.03.02 16:51]:
> Jean-Rene David wrote in message > <slrneugfj0.8r1.jrdavid@princo.homelinux.org>: >> Peut-on toujours être sûr que la >> lecture précède l'écriture? > > Si ce qui est écrit dépend de ce qui est lu, il y a des chances, oui, à > moins d'avoir inventé le programme à remonter le temps. Ouais bon. Le fait que "ce qui est écrit dépend de ce qui est lu" est propre à la question particulière de l'OP, et même ça ne garanti pas qu'on écrira toujours moins ou autant que ce qu'on lit. Ma question portait sur l'utilisation de la construction "< fichier 1<>fichier" en général. -- JR |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
Stephane Chazelas <cette.adresse@est.invalid> writes:
> 2007-02-26, 15:48(+00), Marc Boyer: > > Le 26-02-2007, kevin <nomail@valid.invalid> a écrit: > >> Comment puis-je, dans un fichier texte, supprimer automatiquement une ligne > >> si elle contient l'expression 'toto' ? > > > > grep -v .... > > Plus sérieusement, ça dépend si tu as 3Go de libre ou pas. > > Si tu as 3Go de libre: > > grep -v toto GrosFichier > GrosFichierSansToto > > Et sinon: > > perl -ne 'print unless /toto/; > END{truncate STDOUT, tell STDOUT} > ' < GrosFichier 1<> GrosFichier Tout de suite les gros mots.. sed -i /toto/d Grosfichier MB -- Michel BILLAUD billaud@labri.fr LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792 351, cours de la Libération http://www.labri.fr/~billaud 33405 Talence (FRANCE) |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
2007-03-11, 10:42(+01), Michel Billaud:
> Stephane Chazelas <cette.adresse@est.invalid> writes: > >> 2007-02-26, 15:48(+00), Marc Boyer: >> > Le 26-02-2007, kevin <nomail@valid.invalid> a écrit: >> >> Comment puis-je, dans un fichier texte, supprimer automatiquement une ligne >> >> si elle contient l'expression 'toto' ? >> > >> > grep -v > ... >> > Plus sérieusement, ça dépend si tu as 3Go de libre ou pas. >> > Si tu as 3Go de libre: >> > grep -v toto GrosFichier > GrosFichierSansToto >> >> Et sinon: >> >> perl -ne 'print unless /toto/; >> END{truncate STDOUT, tell STDOUT} >> ' < GrosFichier 1<> GrosFichier > > Tout de suite les gros mots.. > sed -i /toto/d Grosfichier [...] Ca n'aidera pas. sed -i ne travaille pas /in-place/ il utilse un fichier temporaire (du meme nom que le fichier original, mais au moment de lire la dernier ligne, les deux fichiers coexistent sur disque et donc occupent deux fois la taille du fichier original). La solution perl si dessus overwrite le fichier original, c'est different et ne fonctionne que dans certains cas comme celui-ci ou ce qu'on ecrit est toujours plus petit (ou de meme taille) que ce qu'on lit. -- Stéphane |
|
![]() |
| Outils de la discussion | |
|
|