Extraire lignes contenant mots clé (.txt.) [Résolu/Fermé]

Signaler
Messages postés
49
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
9 février 2010
-
Messages postés
49
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
9 février 2010
-
Bonjour,

Je débute en script, voici mon problème:

J'ai un dossier avec une arborescence assez complexe contenant bcp de fichiers .txt. J'aimerai extraire les lignes contenant le mot clé "FIN" de ces fichiers texte puis exporter tout ces nouveaux fichiers texte dans un seul dossier.

C'est faisable en Perl?? (sinon en batch??)

merci d'avance

11 réponses

Messages postés
18223
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 septembre 2020
5 003
hello
copie, dans le dossier \mon dossier, tous les fichiers .txt dans l'arborescence qui contiennent le mot FIN
tu peux mettre echo devant le copy pour voir ce qu'il va faire, sans copier

@echo off

set dossier="\mon dossier"
for /f "delims=" %%a in ('dir /b/s *.txt') do (
	for /F "delims=" %%b in ('findstr /M  "FIN"  "%%a"') do copy "%%b" %dossier%
)
Messages postés
49
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
9 février 2010
1
Slt,
Les fichiers .txt sont recopiés à l'identique avec toutes leurs lignes, les lignes contenant le mot FIN ne sont pas extraites.
Ta syntaxe me semble OK, je ne voie pas ce qu'il ne vas pas?? il doit y avoir un problème dans la sous-boucle for?
Messages postés
18223
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 septembre 2020
5 003
quelle est ta question, copier les fichiers contenant FIN en entier ou extraire juste les lignes contenant FIN et mettre ces lignes dans un seul fichier ?
Messages postés
49
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
9 février 2010
1
Dsl je me suis mal exprimé, il faut que j'extraie toutes les lignes contenant le mot FIN. En gros il faut supprimer toutes les lignes ne contenant pas le mot FIN dans un fichier.txt et ceci fichier par fichier dans toute l'arborescence!
Messages postés
49
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
9 février 2010
1
Voici une ébauche de mon fichier txt
J'ai ceci:


15/01/2009 08:49 0 00:00:00 06-01825CEA04 0 PAU 3.335 -0.002
15/01/2009 08:50 30.661 00:00:30 06-01825CEA04 0 PAU 3.335 0.001
15/01/2009 08:50 36.471 00:00:03 06-01825CEA04 0 DEB_CHA I5 3.335 -0.003
15/01/2009 08:50 39.96 00:00:06 06-01825CEA04 0 CHA I5 3.369 2.028
15/01/2009 08:50 80.646 00:00:47 06-01825CEA04 0 CHA I5 3.401 2.032
15/01/2009 08:51 131.14 00:01:37 06-01825CEA04 0 CHA I5 3.436 2.025
15/01/2009 08:52 161.843 00:02:08 06-01825CEA04 0 CHA I5 3.469 2.024
15/01/2009 08:52 183.346 00:02:30 06-01825CEA04 0 CHA I5 3.506 2.033
15/01/2009 08:52 203.889 00:02:50 06-01825CEA04 0 CHA I5 3.557 2.033
15/01/2009 08:53 214.5 00:03:01 06-01825CEA04 0 CHA I5 3.591 2.026
15/01/2009 08:53 225.389 00:03:12 06-01825CEA04 0 CHA I5 3.631 2.025
15/01/2009 08:53 236.985 00:03:23 06-01825CEA04 0 CHA I5 3.677 2.028
15/01/2009 08:53 247.499 00:03:34 06-01825CEA04 0 CHA I5 3.723 2.034
15/01/2009 08:53 247.499 00:03:34 06-01825CEA04 0 FIN_CHA I5 3.723 2.034
15/01/2009 08:53 248.061 00:00:00 06-01825CEA04 0 DEB_CHA I20 3.726 2.034
15/01/2009 08:53 252.577 00:00:05 06-01825CEA04 0 CHA I20 3.713 0.529
15/01/2009 08:53 254.077 00:00:06 06-01825CEA04 0 FIN_CHA I20 3.694 0.523
15/01/2009 08:53 256.093 00:00:08 06-01825CEA04 0 CHA I20 3.656 -0.002
15/01/2009 08:53 258.585 00:00:00 06-01825CEA04 0 DEB_DCH I10 3.624 -0.005
15/01/2009 08:53 259.591 00:00:01 06-01825CEA04 0 DCH I10 3.612 -0.016
15/01/2009 08:53 260.589 00:00:02 06-01825CEA04 0 DEB_DCH I10 3.602 -0.011

et je voudrai ceci créer un autre fichier txt ayant le mem nom contenant ceci:

15/01/2009 08:53 247.499 00:03:34 06-01825CEA04 0 FIN_CHA I5 3.723 2.034
15/01/2009 08:53 254.077 00:00:06 06-01825CEA04 0 FIN_CHA I20 3.694 0.523
Messages postés
18223
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 septembre 2020
5 003
comme ca
@echo off 

for /f "delims=" %%a in ('dir /b/s *.txt') do findstr "FIN"  "%%a" >> resultat.txt
Messages postés
49
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
9 février 2010
1
Merci ça marche!
Autre question:

Est-il possible d'écrire un fichier résultat par dossier où le script agit?? (a la place d'avoir un seul fichier résultat on en aurai plusieurs mais reparti dans chaque repertoire).
Un truc du genre:
for /f "delims=" %%a in ('dir /b/s *.txt') do findstr "FIN" "%%a" >> 'dir /b/s resultat.txt'
Messages postés
18223
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 septembre 2020
5 003
dans la boucle for, %%a est le nom de chaque fichier .txt
set D=%%~pa assigne à D le nom du chemin dans lequel se trouve le fichier %%a
!D!\resultat.txt va écrire resultat dans chaque dossier, D est entre ! parce qu'on est dans une boucle
@echo off 

setlocal enableDelayedExpansion
for /f "delims=" %%a in ('dir /b/s *.txt') do (
set D=%%~pa
findstr "FIN"  "%%a" >> "!D!\resultat.txt"
)
Messages postés
49
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
9 février 2010
1
Merci ça fonctionne impeccable!

Tu crois qu'il serai possible que le fichier resultat.txt créé dans chaque dossier porte le nom des fichiers qu'il concaténe?

Pour l'instant j'ai ceci:

Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_1-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_10-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_11-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_12-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_7-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_8-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_9-7-2009.txt
resultat.txt

Et il me faudrai cela:
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_1-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_10-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_11-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_12-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_7-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_8-7-2009.txt
Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2_9-7-2009.txt
resultat,Cyclage acc‚l‚r‚ Nø3 2 Elts … 20øC_06-01825CEA07-CEA04 Voie2.txt

En gros le fichier résultat porterai le nom d'un des fichiers .txt sans la date!

La finalité de ceci est que j'ai un script qui scanne mon arborescence a la recherche de fichiers resultat*.txt et qui me les copie dans un dossier <=> le script centralise mes résultats dans un seul dossier, il me faut donc pouvoir les identifier <=> il faut des noms différents aux fichiers résultats.

une idée??
Messages postés
49
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
9 février 2010
1
Merci dubcek, comme toujours ça marche nickel! Affaire Classée!
Messages postés
18223
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 septembre 2020
5 003
essaye ce script
j'ai mis un echo et le findstr en commentaire, il ne va rien exécuter, seulement afficher le nom du fichier

setlocal enableDelayedExpansion
for /f "delims=" %%a in ('dir /b/s *.txt') do (
set D=%%~pa
set nom=%%~na
for /f "delims=_ tokens=1-2" %%b in ('echo !nom!') do (
echo "!D!resultat,%%b%%c.txt"
rem findstr "FIN"  "%%a" >> "!D!resultat,%%b%%c.txt"
)
)