2015-01-13 4 views
7

C'è un modo per estrarre/copiare il numero X di pugno di righe da un file e inserirle in un altro file con un singolo comando utilizzando il prompt dei comandi di Windows?Estrai N righe da file utilizzando il comando di una sola finestra

posso cancellare il primo numero X di linee utilizzando:
più + X [dati file_containing]> [file_to_export_data_to]

Se il comando testa avrebbe funzionato credo che avrei potuto solo fare questo:
testa - X [file_contain dati]> [file_to_export_data_to]

Ma sfortunatamente non funziona.

Sarebbe bello se Windows avesse un comando "minore" ma ancora senza fortuna.

Sono un novizio completo quando si tratta di questa roba quindi sono sicuro che mi manca qualcosa di ovvio. Non voglio installare nulla o utilizzare qualcosa di diverso dal prompt dei comandi.

Grazie

+3

PowerShell: 'get-contenuto del file | select-object -first 10'. (PowerShell è integrato da Windows 7 in poi) –

+0

POWERSHELL> get-content int.txt | select-object -first 10> out.txt – sdd

risposta

1
Set Inp = WScript.Stdin 
Set Outp = Wscript.Stdout 
x = 0 
    Do Until Inp.AtEndOfStream 
       x = x + 1 
     OutP.WriteLine Inp.Readline 
       If x = 5 then Exit Do 
    Loop 

Questo Stampa le linee da 1 a 5. Per utilizzare

cscript //nologo <path to script.vbs> <inputfile >outputfile 
2
(@FOR /f "tokens=1* delims=:" %a IN ('findstr /n "^" "standardwaffle.txt"') DO @IF %a leq 7 ECHO(%b)>u:\junk.txt 

avrebbe estratto i primi 7 linee di standardwaffle.txt-u:\junk.txt ecco che è in una linea di cmd - ma ti sfiderei per entrare in modo affidabile.

Rimuove inoltre qualsiasi : principale su una linea di origine.

@ECHO OFF 
SETLOCAL 
IF %1 lss 0 (SET /a line=-%1) ELSE (SET /a line=%1) 
FOR /f "tokens=1* delims=:" %%a IN ('findstr /n "^" "%~2"') DO IF %%a leq %line% ECHO(%%b 

GOTO :EOF 

questo lotto, salvato come head.bat posizionato ovunque sul percorso permetterebbe di utilizzare

head -n standardwaffle.txt >junk.txt 

per estrarre i primi n linee di standardwaffle.txt-junk.txt

il - sarebbe facoltativo

ma questo comporta l'installazione del batch sul tuo computer. È vietato dal tuo requisito di "non installazione" o "installazione" è intesa solo per le utilità di terze parti?

+0

Il file batch sembra leggere l'intero file per primo, come in un file di 500 Mb sta prendendo molto, e in piccoli file funziona all'istante. D'altra parte, la soluzione con Powershell di dbenham sembra produrre velocemente la parte desiderata, quindi può essere interrotta mentre sta ancora leggendo il resto del file. –

13

È possibile utilizzare PowerShell dalla console cmd.exe:

powershell -command "& {get-content input.txt|select-object -first 10}" >output.txt 

è possibile creare una macro DOSKEY per rendere più facile da usare da linea di comando:

doskey head=powershell -command "& {get-content $1|select-object -first $2}" 

Uso:

head input.txt 10 >output.txt 

Ma non è possibile utilizzare una macro DOSKEY in uno script batch.

È possibile creare una testa.lo script bat invece e posizionarlo in una cartella che è incluso nel PATH:

head.bat

@powershell -command "& {get-content %1|select-object -first %2}" 

Dalla riga di comando, è necessario utilizzare head input.txt 10 >output.txt

Dall'interno di uno script batch , dovresti usare call head input.txt 10 >output.txt

Ho scelto di non avere il file di output come parametro nel caso in cui desideri semplicemente visualizzare il risultato sullo schermo invece di scrivere in un file.

8

la soluzione a un comando più semplice consiste nell'utilizzare Powershell Get-Content.

N - numero di righe.

dall inizio della lima:

Get-Content -Head N file.txt 

Dalla fine del file:

Get-Content -Tail N file.txt 
+2

Ricevo "Impossibile trovare un parametro che corrisponda al nome del parametro 'Testa'." errore. –

+0

Controllare la versione di PowerShell, presumo sia vecchia. O un errore di battitura da qualche parte nel comando. – Janusz

1

Al fine di ottenere l'output utf8 corretta, effettuare le seguenti operazioni in PowerShell

chcp 65001 

$OutputEncoding = New-Object -typename System.Text.UTF8Encoding 

get-content input.txt -encoding UTF8 |select-object -first 10000 > output.txt 

Questo otterrà le prime 10000 linee di input.txt (file in formato utf8) in output.txt con la codifica corretta.

0

è possibile utilizzare questo:

break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb X /t |more +4 | findstr /B /E /V "*****" 

dove si dovrebbe sostituire il X con le linee want.or nome questo head.bat:

break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb %~1 /t |more +4 | findstr /B /E /V "*****" 
Problemi correlati