Extraire première et dernière ligne en batch

Résolu/Fermé
Mael730 Messages postés 49 Date d'inscription vendredi 23 octobre 2009 Statut Membre Dernière intervention 9 février 2010 - 28 oct. 2009 à 16:10
Mael730 Messages postés 49 Date d'inscription vendredi 23 octobre 2009 Statut Membre Dernière intervention 9 février 2010 - 30 oct. 2009 à 09:24
Bonjour,

Voici mon problème, j'ai un fichier .txt dont je veux extraire la première et la dernière ligne pour les copier dans un autre fichier .txt:

4.136377E+00 -2.000195E+00 6.000000E+00
4.136230E+00 -2.000146E+00 7.000000E+00
4.135986E+00 -2.000232E+00 8.000000E+00
4.135889E+00 -2.000177E+00 9.000000E+00
4.135742E+00 -2.000171E+00 1.000000E+01
.
.
.
4.135156E+00 -2.000140E+00 1.400000E+01
4.135010E+00 -2.000183E+00 1.500000E+01
4.134766E+00 -2.000134E+00 1.600000E+01
4.134766E+00 -2.000232E+00 1.700000E+01

Je voudrais donc:

4.136377E+00 -2.000195E+00 6.000000E+00
4.134766E+00 -2.000232E+00 1.700000E+01

J'ai pensé a findstr mais comme dans la première et la dernière ligne il n'y a pas de données qui se distinguent des autres lignes je ne sais pas comment m'y prendre??


P.S: batch obligé!!
A voir également:

5 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 oct. 2009 à 16:29
hello
@echo off 

set c=1
setlocal enableDelayedExpansion
for /f "delims=" %%a in ('type fichier.txt') do (
if !c! EQU 1 echo %%a
set /a c+=1
set d=%%a
)
echo %d%
2
Mael730 Messages postés 49 Date d'inscription vendredi 23 octobre 2009 Statut Membre Dernière intervention 9 février 2010 1
28 oct. 2009 à 18:01
Ca ne m'affiche que la dernière ligne du fichier txt??
0
Mael730 Messages postés 49 Date d'inscription vendredi 23 octobre 2009 Statut Membre Dernière intervention 9 février 2010 1 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
29 oct. 2009 à 09:10
Autant pour moi, ça marche en fait!
J'aimerai étendre le travail du script a toute mon arborescence, tu peux me dire ce qui ne vas pas dans ce que j'ai écrit:

@echo off

set c=1
setlocal enableDelayedExpansion
for /f "delims=" %%a in ('dir /b/s *.txt') do (
set E=%%~pa
if !c! EQU 1 echo %%a >> "!E!resultat.txt"
set /a c+=1
set d=%%a
)
echo %d% >> "!E!resultat.txt"

exit

Le script parcourerai donc tous les répertoires et les sous répertoires à la recherche de fichiers .txt pour en extraire la première et la dernière ligne et les copier dans un fichier résultat.
Dans le script ci dessus, le fichier résultat contient le chemin des fichiers .txt contenu dans le répertoire!!??
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615 > Mael730 Messages postés 49 Date d'inscription vendredi 23 octobre 2009 Statut Membre Dernière intervention 9 février 2010
29 oct. 2009 à 10:21
il faut 2 boucles, une qui trouve les noms des fichiers, l'autre, imbriquée dans la première qui lit les fichiers:
@echo off 

setlocal enableDelayedExpansion
for /f "delims=" %%f in ('dir /b/s *.txt') do (
set E=%%~pf
set c=1
for /f "delims=" %%a in ('type "%%f"') do (
if !c! EQU 1 echo %%a >> "!E!resultat.txt"
set /a c+=1
set d=%%a
)
echo !d!  >> "!E!resultat.txt"
)
0
Mael730 Messages postés 49 Date d'inscription vendredi 23 octobre 2009 Statut Membre Dernière intervention 9 février 2010 1 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
29 oct. 2009 à 13:05
Ok, ca fonctionne nikel!
Et si je veux extraire la première ligne commencant par un chiffre?? (+ extraire la dernière ligne)

Exemple, j'ai ceci:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
4.136377E+00 -2.000195E+00 6.000000E+00
4.136230E+00 -2.000146E+00 7.000000E+00
4.135986E+00 -2.000232E+00 8.000000E+00
4.135889E+00 -2.000177E+00 9.000000E+00
4.135742E+00 -2.000171E+00 1.000000E+01
.
.
.
4.135156E+00 -2.000140E+00 1.400000E+01
4.135010E+00 -2.000183E+00 1.500000E+01
4.134766E+00 -2.000134E+00 1.600000E+01
4.134766E+00 -2.000232E+00 1.700000E+01

et je voudrai ceci:

4.136377E+00 -2.000195E+00 6.000000E+00
4.134766E+00 -2.000232E+00 1.700000E+01

J'imagine qu'il faut insérer un findstr dans la boucle:

@echo

setlocal enableDelayedExpansion
for /f "delims=" %%f in ('dir /b/s *.txt') do (
set E=%%~pf
set c=1
for /f "delims=" %%a in ('type "%%f"') do (
if !c! EQU 1 findstr "^[0-9]" echo %%a >> "!E!resultat.txt"
set /a c+=1
set d=%%a
)
echo !d! >> "!E!resultat.txt"
)

le problème est que je ne sais pas ou le mettre dans la boucle?? comme ci-dessus ca ne marche pas!
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615 > Mael730 Messages postés 49 Date d'inscription vendredi 23 octobre 2009 Statut Membre Dernière intervention 9 février 2010
29 oct. 2009 à 13:35
il faut refaire une boucle pour n'afficher que la première ligne du findstr
@echo off 

setlocal enableDelayedExpansion
for /f "delims=" %%f in ('dir /b/s *.txt') do (
set E=%%~pf
set c=1
for /f "delims=" %%x in ('findstr "^[0-9]" "%%f"') do (
if !c! EQU 1 echo %%x >> "!E!resultat.txt"
set /a c+=1
)
for /f "delims=" %%a in ('type "%%f"') do set d=%%a
echo !d! >>"!E!resultat.txt"
)
0
ladgalen Messages postés 143 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 6 septembre 2013 10
28 oct. 2009 à 16:20
Si tu es sous linux tu peux utiliser les commandes head et tail :


touch toto

# premiere ligne
head --lines=1 fichier.txt >> toto

# dernier ligne
tail --lines=1 fichier.txt >> toto


1
ladgalen Messages postés 143 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 6 septembre 2013 10
28 oct. 2009 à 16:23
oups j'ai confondu batch (DOS) et bash (linux) ... peut être que tail et head existe sous dos !
0
comment peut-pon sortir des aneries pareilles ?!
on n'a pas à se demander "peut-être"....
On demande à google et on a la réponse si l'on n'est pas fichu de lire l'aide en ligne
Grave.
0
ladgalen Messages postés 143 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 6 septembre 2013 10
28 oct. 2009 à 16:31
mmmhhh

qui a dis que linux est compliqué ;)

PS : désolé pour la pollution du post
0

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

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 oct. 2009 à 17:10
trop facile sur Linux, il y a tous les outils :-) ...on peut aussi le faire en une commande avec awk
awk 'NR==1{print $0};END{print $0}' < fichier.txt
0