Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Zeilen in sehr großer TXT Datei (100.000 Zeilen) löschen. Geht nur bis 75 Prozent.

Frage Entwicklung Batch & Shell

Mitglied: 0belixx

0belixx (Level 1) - Jetzt verbinden

27.06.2011, aktualisiert 17:53 Uhr, 3602 Aufrufe, 11 Kommentare

Hallo Leute,

habe folgendes Problem:

Ich muss die ersten 30 Zeilen aus einer txt löschen, so weit so gut, habe das wie folgt gelöst:


FOR /F "delims=" %%i in ('dir /B C:\Log.txt') do (more +30 "%%i" > "%%i.tmp")

Das Problem ist das die tmp Datei zwar erstellt wird aber nicht vollständig.
Die tmp Datei ist wesendlich kleiner als die txt und am Ende steht:

-- Fortsetzung (75%) --

es gibt aber keine Fortsetzung. Die Zeilenanzahl ist zZ knapp 100.000 Zeilen, kann sich aber noch verdoppeln.

Kann mir jemand helfen was ich übersehen habe.

Danke
0belixx
Mitglied: mathe172
27.06.2011 um 19:56 Uhr
Hallo,

versuch mal folgendes als Alternative:
01.
FOR /F "delims=" %%i in ('dir /B C:\Log.txt') do (> "%%i.tmp" (FOR /F "skip=29 usebackq delims=" %%A in ("%%i") do echo.%%A))
Bei "skip=29" musst du die zu löschende Anzahl Zeilen-1 angeben (NICHT 0)

Mathe172
Bitte warten ..
Mitglied: 0belixx
27.06.2011 um 20:35 Uhr
Vielen Dank für die schnelle Idee. Hab das jetz so.

FOR /F "delims=" %%i in ('dir /B C:\Temp\Log.txt') do (> "%%i.tmp" (FOR /F "skip=29 usebackq delims=" %%A in ("%%i") do echo.%%A))

Die Datei läuft jetzt durch.

Nur gibt es jetzt jede Zeile 2x und vor der ersten der zwei wird noch ein "C:\Temp>echo." gesetzt.

0belixx
Bitte warten ..
Mitglied: bastla
27.06.2011 um 20:44 Uhr
Hallo Obelixx und mathe172!

Die erste Schleife ist doch eigentlich sinnlos, da sie ja immer nur ein einzelnes "Log.txt" als %%i liefern kann ...

... daher sollte auch
01.
del Log.tmp 2>nul 
02.
for /f "usebackq skip=29 delims=" %%A in ("C:\Temp\Log.txt") do >>Log.txt.tmp echo %%A
genügen (wobei übrigens allfällige Leerzeilen auf der Strecke bleiben) ...

Übersichtlicher wird's natürlich noch, wenn für Pfad / Dateiname Variablen verwendet werden.

Grüße
bastla
Bitte warten ..
Mitglied: mathe172
27.06.2011 um 20:50 Uhr
Hallo,

Die erste Schleife ist doch eigentlich sinnlos, da sie ja immer nur ein einzelnes "Log.txt" als %%i liefern kann ...
Wie peinlich...

Wobei m.M.n. deine Methode sehr langsam ist (mehrfaches öffnen der Datei für Schreibzugriff und anschliessendes Schliessen)
Wie wär's mit :
01.
rem -Geklaut/kopiert von bastla ;-) 
02.
>Log.txt.tmp (for /f "usebackq skip=29 delims=" %%A in ("C:\Temp\Log.txt") do echo.%%A)
Mathe172
Bitte warten ..
Mitglied: bastla
27.06.2011 um 20:57 Uhr
@mathe172
Sollte natürlich so besser gehen - aber aufgrund der Fehlerbeschreibung wollte ich die Ausgabefunktion mal etwas variieren ...
Ganz nebenbei: Der Punkt nach Deinem "echo" schadet zwar nicht, ist aber gar nicht nötig, da für ein "leeres" %%A der "do"-Teil ohnehin nicht ausgeführt wird (weshalb ja auch keine Leerzeilen in die Ergebnisdatei mitgenommen werden).

Grüße
bastla
Bitte warten ..
Mitglied: 0belixx
27.06.2011 um 21:05 Uhr
@bastla

Danke funktioniert langsam aber da ich keine Eile habe mach ich das so danke.

@mathe172
bei deinem schnippsel wird immer noch eine 2te Zeile angelegt.

0belixx
Bitte warten ..
Mitglied: mathe172
27.06.2011 um 21:34 Uhr
Hallo,

bei deinem schnippsel wird immer noch eine 2te Zeile angelegt.

Wie meinst du das?

Mathe172
Bitte warten ..
Mitglied: 0belixx
27.06.2011 um 21:53 Uhr
Wie ich oben schon geschrieben habe,
Die jeweilige Zeile der Quelldatei taucht 2x auf und vor der ersten der beiden Zeilen steht "C:\Temp>echo."

0belixx
Bitte warten ..
Mitglied: mathe172
27.06.2011 um 22:17 Uhr
Hallo,

uups , da hab ich was vergessen:
Füge davor ein @echo off-Befehl ein (da die Gesamte Ausgabe der Schleife umgeleitet wird, stehen da immer zuerst noch die echo-Befehle)

Mit freundlichen Grüßen,
Mathe172
Bitte warten ..
Mitglied: 0belixx
27.06.2011 um 22:21 Uhr
Jetzt gehts.

danke an euch beide.
0belixx
Bitte warten ..
Mitglied: pieh-ejdsch
28.06.2011 um 08:56 Uhr
moin Obelix,

wenn Du Batches mit angeschaltenem Echo (zum Debuggen) hast und nicht auf die Befehlsausgabe verzichten willst,
muss ein anderes Handle (Kanal für die Verarbeitung) als Handle 1 benutzt werden.

in Handle 1 (die CMD-gesamtausgabe) wird halt alles reingeschrieben.

Handle 3 ist noch auf der CMD-Line sichtbar wenn es nicht (weg-)umgeleitet wird.
Ab Handle 4 muss/sollte dann Explizit Umgeleitet werden.

01.
:: für eine zu sehende Befehlsausgabe mit Echo on 
02.
rem -Geklaut/kopiert von bastla ;-) 
03.
 
04.
4>Log.txt.tmp (for /f "usebackq skip=29 delims=" %%A in ("C:\Temp\Log.txt") do >&4 echo.%%A)
Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...