[Duda] Extraer determinada linea de archivo

Iniciado por galmito, 27 Enero 2011, 16:16 PM

0 Miembros y 1 Visitante están viendo este tema.

galmito

Hola, mi duda es la siguiente:

¿Cómo extraer determinada linea de un archivo .txt (Da igual el formato)?
Creo que tiene que ser con una mezcla de For /F, tokens, y skip, pero no me sale  :-\

Por ejemplo, quiero extraer la linea 32 de un archivo, ¿Cómo hago?
Gracias

EDITO:
Por ejemplo tengo esto:


Hola esto es
una prueba
de extracción. xD


Y quiero sacar la linea 2 por ejemplo, para que quede asi:


una prueba


Espero haber aclarado.

SuperDraco

a ver, en tu idioma que significa "extraer"? con una herramienta que se llama "SED.exe" es muy manejable y puedes hacer lo que dices (supongo) y mas cosas pero ya no recuerdo como usarla bien tendria que mirarlo y aora no tengo timpo, saludos
No he vuelto, solo estoy de paso.

galmito

Decía para hacerlo sin otro programa externo.  :-\

xassiz~

Código (dos) [Seleccionar]

@echo off

set/a n_line=%1-1
if %n_line% LSS 0 (exit /b -1)
if %n_line% EQU 0 (call:show) else (call:show " skip=%n_line%")
exit /b 0

:show
for /f "tokens=*%~1" %%%% in (file.txt) do (
    echo.%%~%%
    goto:eof
)


Ejemplo:
C:\Users\Pablo\Desktop> script 2
una prueba

C:\Users\Pablo\Desktop>

galmito

Gracias ya lo solucione así:

set /p skipes=Ingrese linea:
if %skipes%==0 FOR /F "tokens=*" %%A IN (mapa1.bat) DO (
set "var=%%A"&goto fin)
FOR /F "tokens=* skip=%skipes%" %%A IN (mapa1.bat) DO (
set "var=%%A"&goto fin)

:fin
pause>nul

xassiz~

De nada.

Por cierto, es mala costumbre poner varias órdenes en la misma línea con &, y es buena costumbre identar el código. :P

leogtz

Hay una manera mucho más "sencilla":
Código (dos) [Seleccionar]
@echo off
for /f "tokens=2 delims=:" %%_ in ('
^(
echo 2^,2l
echo e
^) ^| edlin /b FILEIN.TXT
') do (echo %%_)


El problema sería el delimitador, pero en fin, si no tienes problemas con el formato de texto, puedes usar esta manera.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

xassiz~

Está interesante tu solución Leo, pero en Windows 7 no tengo edlin :P

leogtz

#8
Cita de: pablomi en 27 Enero 2011, 20:13 PM
Está interesante tu solución Leo, pero en Windows 7 no tengo edlin :P

Mmmm, no sabía que lo habían quitado. Mmmmmm. Supongo que se habrán declinado ya por el uso de powershell.

En powershell se podría hacer algo así:

Código (bash) [Seleccionar]
$line = (Get-Content Test.txt)[1]
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

xassiz~

Sí, podría quedar así el script:
Código (powershell) [Seleccionar]

$numero_linea = [Console]::In.ReadLine(); #Input

$numero_linea-=1;
$line = (Get-Content file.txt)[$numero_linea]
echo $line