Extraer primera y última línea por lotes

Resuelto
Mael730 Mensajes publicados 50 Estado Miembro -  
Mael730 Mensajes publicados 50 Estado Miembro -
Bonjour,

Aquí está tu problema, tengo un archivo .txt del cual quiero extraer la primera y la última línea para copiarlas en otro archivo .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

Así que quiero:

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

Así que pensé en findstr, pero como en la primera y la última línea no hay datos que se distingan de las otras líneas, no sé cómo proceder??

P.D: batch obligatorio!!
Configuración: Windows XP Firefox 3.5.3

5 respuestas

  1. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    hola
    @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
    1. Mael730 Mensajes publicados 50 Estado Miembro 1
       
      ¿Solo me muestra la última línea del archivo txt?
      0
    2. Mael730 Mensajes publicados 50 Estado Miembro 1 > dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención  
       
      Lo siento, no puedo ayudarte con eso.
      0
    3. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660 > Mael730 Mensajes publicados 50 Estado Miembro
       
      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
    4. Mael730 Mensajes publicados 50 Estado Miembro 1 > dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención  
       
      4.136377E+00 -2.000195E+00 6.000000E+00
      4.134766E+00 -2.000232E+00 1.700000E+01
      0
    5. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660 > Mael730 Mensajes publicados 50 Estado Miembro
       
      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
  2. ladgalen Mensajes publicados 158 Estado Miembro 10
     
    Si estás en Linux, puedes usar los comandos head y tail:

     touch toto # primera línea head --lines=1 archivo.txt >> toto # última línea tail --lines=1 archivo.txt >> toto 


    --
    ubuntu 9.04
    1
  3. ladgalen Mensajes publicados 158 Estado Miembro 10
     
    ¡Ups, confundí batch (DOS) y bash (Linux)... tal vez tail y head existen en DOS!
    --
    ubuntu 9.04
    0
    1. greg
       
      ¿Cómo se pueden salir con tonterías así?!
      No hay que preguntarse "quizás"....
      Se pregunta a Google y se tiene la respuesta si no se es capaz de leer la ayuda en línea
      Grave.
      0
  4. ladgalen Mensajes publicados 158 Estado Miembro 10
     
    mmmhhh

    ¿quién dijo que Linux es complicado? ;)

    PD: perdón por la contaminación del post

    --
    ubuntu 9.04
    0
  5. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    demasiado fácil en Linux, hay todas las herramientas :-) ...también se puede hacer en un solo comando con awk
    awk 'NR==1{print $0};END{print $0}' < archivo.txt
    0