Récupération d'un nombre de lignes entre chaque mot "demande"

Résolu/Fermé
richy - Modifié par richy le 8/10/2012 à 13:42
 richy - 25 nov. 2012 à 16:10
Bonjour,
J'ai un fichier nommé "toto" sous UNIX Solaris10, je voudrais extraire la partie qu'il y'a entre les lignes "demande" et l'afficher dans le fichier correspondant exemple : le fichier x contiendra les action de x et ainsi de suite .

fichier toto:
.
.
demande x
action 1......
action 2......
demande y
action 3......
action 4......
action 5......
demande z
action 6.....
action 7......
action 8......
action 9.......
demande t
action 10.....
action 11...
.
.
.
demande n
action n.....

Merci d'avance!
</gras></gras>
A voir également:

5 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
8 oct. 2012 à 13:36
Salut,

L'extraire comment ? Tout d'un coup ?

Merci de poster un exemple AVANT => APRÈS !
0
Je voudrais extraire la partie qu'il y'a entre les lignes "demande" et l'afficher dans un autre fichier correspondant exemple : le fichier x contiendra les action de x le fichier y contiendra les action de y et ainsi de suite jusqu'au fichier n contiendras les actions de n.

cordiales salutations!
0
avant :
un seul fichier
toto:
demande x
action 1......
action 2......
demande y
action 3......
action 4......
action 5......
demande z
action 6.....
action 7......
action 8......
action 9.......
demande t
action 10.....
action 11...
.
.
.
demande n
action n.....

après:
n fichiers ( x, y, z, t,........n)

1 - fichier x
demande x
action 1......
action 2......

2 - fichier y
demande y
action 3......
action 4......
action 5......
.
.
3 - fichier n
demande n
action n

cordiales salutations
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
9 oct. 2012 à 15:41
Ben logiquement la solution donnée par dubcek devrait faire exactement ce que tu demandes, non ?
0
Tu n'as qu'à te coder un joli petit parseur en C ;-)
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
8 oct. 2012 à 14:49
hello
sur Solaris, utiliser nawk
$ nawk '/^demande/ {f=$2; next} {print > f}' toto
$ more ?
::::::::::::::
t
::::::::::::::
action 10.....
action 11... 
::::::::::::::
x
::::::::::::::
action 1......
action 2......
::::::::::::::
y
::::::::::::::
action 3......
action 4......
action 5......
::::::::::::::
z
::::::::::::::
action 6.....
action 7......
action 8......
action 9.......
$ 
0
Merci dubcek!
ta solution marche mais j'ai un soucis:
la commande nawk ne me récupère pas tout les demandes c'est-à-dire ne parcoure pas le fichier jusqu'à la fin à la énième demande! merci !
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
23 oct. 2012 à 12:44
avec /^demande/ nawk va chercher les lignes qui commencent exactement par demande et prendre le champ 2 comme nom de fichier
y a-t-il des majuscules, espace ou autre ?
0
re dubcek
c'est cette commande que j'ai utilisé: nawk '/^AGENCE/ {f=$2; next} {print > f}' toto ça marche comme je voulait le seul probleme c'est que le nawk ne parcour pas tout le fichier toto jusqu'à la fin c'est à dire que j'ai en sortie:
fichier x, fichier y, ........... pas la totalité des fichiers manque les fichiers : ... n-2, n-1,n

cordiales salutation !
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
23 oct. 2012 à 16:32
est-ce que grep '^AGENCE' toto trouve toutes les lignes ?
0
re dubcek :

oui j'ai toute les les lignes avec : grep '^demande' toto
reste à combinner ce grep avec le nawk
je te laisse le soin de le faire merci!

cordiales salutation
0
merci pour la commande dubcek par contre j'ai l'erreur suivante:

nawk: null file name in print or getline
enregistrement d'entrée no 1, fichier toto
numéro de ligne source 1


cordiales salutations!
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
9 oct. 2012 à 08:30
le champ 2 est vide, affiche les premières lignes du fichier
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
9 oct. 2012 à 16:18
exécuter ça pour voir ce qu'il fait
nawk '/^demande/ {f=$2; print "creation de: " f; next} {print "\tajout de: " $0; print $0 > f}' toto
0
Bonjour dubcek:
tout mes fichier sont dans le répertoire / mnt / incident / :
/ mnt / incident / liste
/ mnt / incident / groupe1.............................................groupe10
/ mnt / incident / 101.........................................................412

Le travail demandé et de lire toutes les lignes du fichier liste une par une avec une boucle for par example et voir à quel groupe la ligne appartient-elle.
par example: je lis la première ligne du fichier liste qui est 101, je regarde si 101 appartient au fichier groupe1 oui il appartient au groupe1 alors je copie le contenu du fichier 101 dans un nouveau fichier que je vais nommé incident_groupe1 :

* contenu du fichier 101 est :
AGENCE 101
mardi, 13 novembre 2012, 15:44:15 CET
=> Sauvegarde avant TFJ du 13112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

je lis la deuxième ligne du fichier liste qui est 114, je regarde si 114 appartient au fichier groupe1 oui il appartient au groupe1 alors je copie le contenu du fichier 114 dans le fichier incident_groupe1 :

* contenu du fichier 114 est :
AGENCE 114
mardi, 13 novembre 2012, 15:28:46 CET
=> Sauvegarde avant TFJ du 13112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

je lis la troisième ligne du fichier liste qui est 117, je regarde si 117 appartient au fichier groupe1 NON, il appartient au groupe2 alors je copie le contenu du fichier 117 dans un nouveau fichier que je vais nommé incident_groupe2 :

est ainsi de suite pour toutes les ligne lues du fichier liste.

* contenu du fichier 117 est :
AGENCE 117
mardi, 13 novembre 2012, 15:55:16 CET
=> Sauvegarde apres TFJ du 13112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

à ce state le fichier le contenu du fichier incident_groupe1 est :

AGENCE 101
mardi, 13 novembre 2012, 15:44:15 CET
=> Sauvegarde avant TFJ du 13112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 114
mardi, 13 novembre 2012, 15:28:46 CET
=> Sauvegarde avant TFJ du 13112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
.
.

à ce state le fichier le contenu du fichier incident_groupe2 est :

AGENCE 117
mardi, 13 novembre 2012, 15:55:16 CET
=> Sauvegarde apres TFJ du 13112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
.
.
et ainsi de suite.
Merci cordiales salutations!
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
19 nov. 2012 à 08:53
0
bonjour dubcek !
Je n'arrives pas à ouvrir ce lien!

cordiales salutations!
0

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

Posez votre question
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
20 nov. 2012 à 14:39
moi, je veux 1 million de dollars.
debug avec tes données:
for F in $(cat liste); do       pour chaque fichier dans liste
N=$(grep -l $F groupe*);        trouve le fichier groupe qui le contient
cat $F >> incident_$N; done     ajoute le contenu du fichier à incident_groupe
0
ok en espèce ou par chèque?
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
20 nov. 2012 à 15:15
espèces usagées seulement, No qui ne se suivent pas
décrit mieux ce qui ne marche pas
0
bonjour dubcek!
le programme marche avec la boucle for:
for F in $(cat liste); do N=$(grep -l $F groupe*) ; cat $F >> incident_$N; done

il y a juste un petit soucis dans le cas ou j'ai une redondance d'évènements d'une agence avec deux dates différentes
la commande : nawk '$1 ~ /Agence/ {close(f); f=$2; print f > "liste"; next} {print > f}' toto
ne prend pas en charge le cas ou il y'a une agence qui a des évènements à deux date différentes dans le fichier toto

: exemple:
AGENCE 126
lundi, 19 novembre 2012, 15:55:33 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 149
lundi, 19 novembre 2012, 14:50:28 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 155
lundi, 19 novembre 2012, 15:33:21 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 156
lundi, 19 novembre 2012, 15:46:48 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 164
lundi, 19 novembre 2012, 16:45:09 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
lundi, 19 novembre 2012, 16:49:19 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 165
lundi, 19 novembre 2012, 16:11:02 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
lundi, 19 novembre 2012, 16:29:04 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 178
lundi, 19 novembre 2012, 17:11:27 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
lundi, 19 novembre 2012, 17:51:44 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 179
lundi, 19 novembre 2012, 15:53:52 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 196
lundi, 19 novembre 2012, 15:33:08 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 199
lundi, 19 novembre 2012, 16:31:10 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 215
dimanche, 18 novembre 2012, 16:17:15 CET
=> Sauvegarde avant TFJ du 18112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
dimanche, 18 novembre 2012, 16:48:51 CET
=> Sauvegarde apres TFJ du 18112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 215
lundi, 19 novembre 2012, 16:25:02 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
lundi, 19 novembre 2012, 16:58:20 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 308
lundi, 19 novembre 2012, 16:19:45 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 322
lundi, 19 novembre 2012, 15:55:30 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
lundi, 19 novembre 2012, 16:18:58 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 358
lundi, 19 novembre 2012, 15:27:30 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 404
lundi, 19 novembre 2012, 15:57:15 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 422
lundi, 19 novembre 2012, 16:03:54 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 435
lundi, 19 novembre 2012, 15:43:22 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

AGENCE 444
lundi, 19 novembre 2012, 16:32:59 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

en résultat j'ai dans le fichier 215 que le dernier évènement du 19 novembre2012
fichier 215:
AGENCE 215
lundi, 19 novembre 2012, 16:25:02 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
lundi, 19 novembre 2012, 16:58:20 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

dans le contenu du fichier incident_groupe3 :
l'évènement du 19 novembre 2012 est dupliqué en double et l'évènement du 18 novembre n'est pas affiché.

AGENCE 215
lundi, 19 novembre 2012, 16:25:02 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
lundi, 19 novembre 2012, 16:58:20 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
AGENCE 215
lundi, 19 novembre 2012, 16:25:02 CET
=> Sauvegarde avant TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service
lundi, 19 novembre 2012, 16:58:20 CET
=> Sauvegarde apres TFJ du 19112012 sur DAT non faite
=> DAT ou lecteur de DAT hors service

je voudrais afficher le tout c-à-d les évènements des deux dates 18 et 19 novembre dans le fichier incident_groupe3

merci!
cordiales salutations
0
c'est comme le language "basic" d'un thomson to8...c'est vraiment pas compliqué ce que tu demandes....sans "nawk" ca marche aussi....
0
je vais essayer merci!
0