it-swarm.com.de

Extrahieren Sie mit einem einzigen Windows-Befehl N Zeilen aus der Datei

Gibt es eine Möglichkeit, die X-Zeilenanzahl der Faust aus einer Datei zu extrahieren/zu kopieren und sie mit einem einzigen Befehl über die Windows-Eingabeaufforderung in eine andere Datei einzugeben?

Ich kann die ersten X Zeilenanzahl löschen mit:
more + X [dateihaltige Daten]> [file_to_export_data_to]

Wenn das Kopfkommando funktionieren würde, denke ich, könnte ich das einfach tun:
head -X [dateihaltige Daten]> [file_to_export_data_to]

Das geht aber leider nicht.

Es wäre großartig, wenn Windows einen "weniger" -Befehl hätte, aber auch kein Glück. 

Ich bin ein absoluter Neuling, wenn es um dieses Zeug geht. Ich bin mir sicher, dass mir etwas offensichtlich fehlt. Ich möchte nichts installieren oder etwas anderes als den Befehl Prompt verwenden.

Vielen Dank

9
user1769292

Sie können PowerShell über die cmd.exe-Konsole verwenden:

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

Sie können ein DOSKEY-Makro erstellen, um die Verwendung über die Befehlszeile zu erleichtern:

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

Verwendungszweck:

head input.txt 10 >output.txt

Sie können jedoch kein DOSKEY-Makro in einem Batch-Skript verwenden.

Sie können stattdessen ein head.bat-Skript erstellen und es in einem Ordner ablegen, der in Ihrem PATH enthalten ist:

head.bat

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

In der Befehlszeile würden Sie head input.txt 10 >output.txt verwenden.

In einem Batch-Skript würden Sie call head input.txt 10 >output.txt verwenden.

Ich habe mich entschieden, die Ausgabedatei nicht als Parameter zu verwenden, wenn Sie das Ergebnis einfach auf dem Bildschirm anzeigen möchten, anstatt in eine Datei zu schreiben.

16
dbenham

die einfachste Ein-Befehl-Lösung ist die Verwendung von Powershell Get-Content.

N - Anzahl der Zeilen.

Vom Anfang der Akte:

Get-Content -Head N file.txt

Vom Ende der Datei:

Get-Content -Tail N file.txt
15
Janusz
(@FOR /f "tokens=1* delims=:" %a IN ('findstr /n "^" "standardwaffle.txt"') DO @IF %a leq 7 ECHO(%b)>u:\junk.txt

würde die ersten 7 Zeilen von standardwaffle.txt nach u:\junk.txt extrahieren, so dass es sich hier um eine cmd-Zeile handelt - aber ich würde Sie herausfordern, das zuverlässig einzugeben.

Es würde auch alle führenden : in einer Quellzeile entfernen.

@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

Dieser Stapel, der als head.bat an einem beliebigen Ort in Ihrem Pfad gespeichert wurde, könnte Sie verwenden

head -n standardwaffle.txt >junk.txt

die ersten n-Zeilen von standardwaffle.txt nach junk.txt extrahieren

der - wäre optional

aber dies beinhaltet die Installation des Stapels auf Ihrem Computer. Ist dies aufgrund Ihrer Anforderung "keine Installation" verboten, oder ist "Installation" nur für Dienstprogramme von Drittanbietern gedacht?

2
Magoo
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

Dadurch werden die Zeilen 1 bis 5 gedruckt

cscript //nologo <path to script.vbs> <inputfile >outputfile
1
Serenity

Führen Sie folgende Schritte in Powershell aus, um eine korrekte Ausgabe von utf8 zu erhalten

chcp 65001

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

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

Dadurch werden die ersten 10000 Zeilen input.txt (Datei im Format utf8) mit korrekter Kodierung in output.txt übertragen.

1
sdk

sie können dies verwenden:

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

wo Sie dasXdurch die gewünschten Zeilen ersetzen sollen. Oder nennen Sie diesen head.bat:

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

Wenn Sie sich an einfache Windows-Befehle halten möchten, können Sie dies verwenden, wären aber für große Dateien etwas langsam ;-) (Ich habe eine zweite Lösung hinzugefügt, die besser funktioniert :-) Dadurch werden die letzten 100 Datensätze von beliebiger Länge extrahiert Datei)

find /n " " <test.txt >test.tmp
for /l %%i in (1,1,100) do find "[%%i]" <test.tmp >test.tmp2
for /f "delims=] tokens=2" %%i in (test.tmp2) do echo %%i >>test.new
del test.tmp
del test.tmp2
move /y test.new test.txt

find /v /n "" <test.txt >test.tmp
for /f "delims=: tokens=2 %%i in ('find /v /c "" test.txt') do set /a NR=%%i
set /a NS=%NR%-100
for /l %%i in (%NS%, 1, %NR%) do find "[%%i]" <test.tmp >>test.tmp2
for /f %%i "delims=] tokens=2 %%i in (test.tmp2) do echo %%i >>test.new
move /y test.new test.txt
0
Chris Clews