Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recherche d'outils

5 réponses
Avatar
François Patte
Bonjour,

Ceci n'est pas à proprement parler de la configuration linux, mais je
cherche un moyen de couper un fichier texte avec des outils fonctionnant
sous linux....

Soit un texte long dans lequel je peux mettre des "balises", est-il
possible de récupérer dans des fichiers séparés le texte situé entre
deux balises de la manière suivante:

<début> titre1

blabla1 ....
.....
blabla1 ....
.....

<fin>

<début> titre2

blabla2 ...
.....

<fin>

le script mettrait le texte situé entre <début> et <fin> dans un fichier
ayant pour nom le titre correspondant à la balise de début:

blabla1 ....
.....
blabla1 ....
.....
dans le fichier titre1.txt


blabla2 ...
.....
dans le fichier titre2.txt

etc.

Merci pour toute aide.
--
François Patte
Université Paris Descartes

5 réponses

Avatar
Doug713705
Le 05-04-2016, François Patte nous expliquait dans
fr.comp.os.linux.configuration (<ne020j$2vd5$) :

Bonjour,

Ceci n'est pas à proprement parler de la configuration linux, mais je
cherche un moyen de couper un fichier texte avec des outils fonctionnant
sous linux....

Soit un texte long dans lequel je peux mettre des "balises", est-il
possible de récupérer dans des fichiers séparés le texte situé entre
deux balises de la manière suivante:

<début> titre1

blabla1 ....
.....
blabla1 ....
.....

<fin>

<début> titre2

blabla2 ...
.....

<fin>



L'outil que tu cherches s'appelle awk.

--
Le ciel est bleu, le jour est J.
La bombe est H mais mon grand-père s'ennuie
Comme un chien dans un cimetière le quatorze juillet.
-- H.F. Thiéfaine, Comme un chien dans un cimetière
Avatar
Philippe Weill
Le 05/04/2016 12:47, Doug713705 a écrit :
Le 05-04-2016, François Patte nous expliquait dans
fr.comp.os.linux.configuration (<ne020j$2vd5$) :

Bonjour,

Ceci n'est pas à proprement parler de la configuration linux, mais je
cherche un moyen de couper un fichier texte avec des outils fonctionnant
sous linux....

Soit un texte long dans lequel je peux mettre des "balises", est-il
possible de récupérer dans des fichiers séparés le texte situé entre
deux balises de la manière suivante:

<début> titre1

blabla1 ....
.....
blabla1 ....
.....

<fin>

<début> titre2

blabla2 ...
.....

<fin>



L'outil que tu cherches s'appelle awk.





une base comme cela

awk '/^<deb/{n=n+1}{ print > n".txt"}' foo.txt

il ne te resterait plus qu'a virer les balises (grep -v)
Avatar
Benoit Izac
Bonjour,

Le 05/04/2016 à 11:54, François Patte a écrit dans le message
<ne020j$2vd5$ :

Ceci n'est pas à proprement parler de la configuration linux, mais je
cherche un moyen de couper un fichier texte avec des outils fonctionnant
sous linux....

Soit un texte long dans lequel je peux mettre des "balises", est-il
possible de récupérer dans des fichiers séparés le texte situé entre
deux balises de la manière suivante:

<début> titre1

blabla1 ....
.....
blabla1 ....
.....

<fin>

<début> titre2

blabla2 ...
.....

<fin>

le script mettrait le texte situé entre <début> et <fin> dans un fichier
ayant pour nom le titre correspondant à la balise de début:

blabla1 ....
.....
blabla1 ....
.....
dans le fichier titre1.txt


blabla2 ...
.....
dans le fichier titre2.txt

etc.



% cat cut.pl
#!/usr/bin/perl
use strict;
use warnings;

my $fh;

for (<>) {
if (/<début> (w+)/) {
open($fh, ">", "$1.txt") or die "can't open $1.txt: $!";
} elsif (/<fin>/) {
close($fh);
} elsif (fileno($fh)) {
print($fh $_);
}
}
% perl cut.pl < in.txt
% cat titre1.txt

blabla1 ....
.....
blabla1 ....
.....

% cat titre2.txt

blabla2 ...
.....

%

--
Benoit Izac
Avatar
Lucas Levrel
Le 5 avril 2016, François Patte a écrit :

Ceci n'est pas à proprement parler de la configuration linux, mais je
cherche un moyen de couper un fichier texte avec des outils fonctionnant
sous linux....



gcc ? :-)

Soit un texte long dans lequel je peux mettre des "balises", est-il
possible de récupérer dans des fichiers séparés le texte situé entre
deux balises de la manière suivante:


(...)

awk '{if($1=="<début>") fichier=$2".txt"; else if($1=="<fin>") fichier="";
else if(fichier != "") print > fichier}' input.txt

Si le titre après <début> contient des espaces, seul le premier mot sera
utilisé pour nommer le fichier. Ça doit pouvoir se corriger, mais as-tu
prévu d'éviter les noms de fichier avec espaces ?


--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
C'est mieux avé les accents (F. Patte)
Avatar
François Patte
Le 06/04/2016 14:33, Lucas Levrel a écrit :
Le 5 avril 2016, François Patte a écrit :

Ceci n'est pas à proprement parler de la configuration linux, mais je
cherche un moyen de couper un fichier texte avec des outils fonctionnant
sous linux....



gcc ? :-)



J'ignore tout du C...!


Soit un texte long dans lequel je peux mettre des "balises", est-il
possible de récupérer dans des fichiers séparés le texte situé entre
deux balises de la manière suivante:


(...)

awk '{if($1=="<début>") fichier=$2".txt"; else if($1=="<fin>")
fichier=""; else if(fichier != "") print > fichier}' input.txt

Si le titre après <début> contient des espaces, seul le premier mot sera
utilisé pour nommer le fichier. Ça doit pouvoir se corriger, mais as-tu
prévu d'éviter les noms de fichier avec espaces ?



Merci pour cette réponse, je vais arriver à bricoler....

Oui, mes noms de fichiers sont sans espaces, discipline unix depuis la
nuit des temps!


--
François Patte
Université Paris Descartes