Top-Themen

Aktuelle Themen (A bis Z)

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

Textdatei per Batch in mehrere aufteilen

Mitglied: blacksun

blacksun (Level 1) - Jetzt verbinden

10.09.2008, aktualisiert 11.09.2008, 12013 Aufrufe, 6 Kommentare

Hallo zusammen,

ich habe folgendes Problem.
Ich habe eine Textdatei, die sehr viele Zeilen enthält (>10000 Zeilen).

Eine vorhandene Batch geht her und liest nacheinander eine Zeile aus, macht damit etwas, und schreibt das Ergebnis in eine Ausgabedatei.
So geht die Batch von Zeile zu Zeile, was natürlich entsprechend lange dauert, bis alle Zeilen durch sind.

Nun habe ich mir überlegt, dass man das ganze Parallel laufen lassen könnte.
Sprich ich teile die Quell-Textdatei in mehrere Teile, verteile diese auf mehrere Ordner, und starte in jedem Ordner die jeweilige Batch-Datei, die die Verarbeitung pro Zeile in der jeweiligen Teil-Quell-Datei übernimmt.

Am Ende, wenn alle Batch-Dateien durchgelaufen sind, füge ich die verschiedenen Ausgabe-Dateien der verschiedenen Ordner zusammen.
Das Zusammenfügen mache ich am einfachsten mit dem for-Befehl. Ich lasse in jedem Ordner jeweils die Ausgabedatei zeilenweise lesen und schreibe das ganze dann in eine große Ausgabedatei.

Mein Problem:
Wie teile ich die große Quelldatei in möglichst gleichmäßige Teile auf. Sprich ich habe 10 Ordner, in die jeweils eine Teil-Quelldatei mit ungefähr gleich viel Zeilen soll.

Wie könnte ich sowas am elegantesten machen? Wichtig wäre, dass halt immer genau 10 Teildateien rauskommen.
Sprich wenn nur 10 Zeilen in der großen Quelldatei stehen, dann sollen halt 10 Dateien mit jeweils einer Zeile davon rauskommen, umgekehrt bei 10000 Zeilen eben 1000 Zeilen pro Datei.

Viele Grüße
Martin
Mitglied: 60730
10.09.2008 um 19:30 Uhr
Servus,

ein möglicher Ansatz wäre:

01.
rem arbeitskopie 
02.
copy meinetextdatei.txt meintextdatei.ini 
03.
@echo endeglaende >> meintextdatei.ini 
04.
find /n "endeglaende" meintextdatei.ini
so bekommst du schonmal die komplette Anzahl der Zeilen heraus, ohne vorher "wirklich" die ganze Datei mit einer For Schleife durchzuackern.


...aber wie dann weiter?

Das Zusammenfügen mache ich am einfachsten mit dem for-Befehl.
Ich lasse in jedem Ordner jeweils die Ausgabedatei zeilenweise lesen und schreibe das ganze dann in eine große Ausgabedatei.

Eher weniger, mach lieber ein copy text1.txt + text2.txt komplett_text.txt, dein Ziel ist es doch, "schneller" zu werden.

Gruß
Bitte warten ..
Mitglied: bastla
10.09.2008 um 20:07 Uhr
Hallo blacksun!

Wie schon von TimoBeil richtig festgestellt, muss zum Aufteilen jede Zeile gelesen und geschrieben werden, dazu noch die Abfrage, ob die Grenze für einen Teil bereits erreicht ist - wenn das alles in Batch passiert, wird der ev durch die folgende Parallelverarbeitung zu erzielende Vorteil dadurch vermutlich schon zunichte gemacht.

Als Alternative könnte daher (mal wieder ) VBS herhalten:
01.
Quelle = "D:\Datei.txt" 
02.
Ziel = "D:\Teil" 
03.
Set fso = CreateObject("Scripting.FileSystemObject") 
04.
T = Split(fso.OpenTextFile(Quelle).ReadAll, vbCrLF) 
05.
U = UBound(T) 
06.
S = Int(U / 10) 
07.
For i = 1 To 9 
08.
	W = "" 
09.
	For j = (i - 1) * S To i * S - 1 
10.
		W = W & T(j) & vbCrLF 
11.
	Next 
12.
	fso.CreateTextFile(Ziel & i & ".tmp", True).Write W 
13.
Next 
14.
W = "" 
15.
For j = 9 * S To U 
16.
		W = W & T(j) & vbCrLF 
17.
Next 
18.
fso.CreateTextFile(Ziel & "10.txt", True).Write W
Für 66000 Zeilen zu je etwa 65 Zeichen läuft das Script bei mir etwa 40 Sekunden ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
10.09.2008 um 20:52 Uhr
Hmmja, bastla,

das ist natürlich eine Lösung für die Aufgabenstellung (und sogar eine kurze und knackige Lösung!), aber....

Hey, lass uns mal zwei Schritte zurücktreten und dann noch mal draufgucken...

  • Jetzt nudeln wir eine Zig-Zehntausende-Zeilen-Datei in sportlichen 40 sec durch und portionieren die in 10 handlichere Häppchen,....
  • damit danach 10 eher drömelige Bätche es zeitlich auf die Reihe bekommen, vor dem Morgengrauen eines dieser Häppchen abzufrühstücken..
  • und sich dann wie die 7 (+3) Zwerge darum balgen, die Ergebnisse wieder in eine Final-Outputdatei zu schreiben....

Ööööhmmm.....

Also nee....

Jetzt würde ich bewerten und abwägen...
  • wenn das Weiterlaufen der bisherigen Lösung das Ziel ist: Dann soll doch der heutige Batch morgens um 02h per Taskplaner gestartet werden und meinetwegen 2 Stunden rumrödeln
  • wenn Performance-Tuning das Ziel ist, dass lass uns die ganze Aufgabe per VBS (oder besserem) abfackeln. Besser im Sinne von: Weniger Interpreter, mehr Kompilertes.

So wie jetzt möchte ich es als "Lösung" eigentlich nicht im Forum stehen haben.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
10.09.2008 um 21:23 Uhr
@Biber
Dann gilt also für obiges Script: "Habe Lösung - suche Problem."

Allerdings muss ich Dir (kostet mich allerdings keine Überwindung ) natürlich Recht geben ...

Grüße
bastla
Bitte warten ..
Mitglied: blacksun
11.09.2008 um 22:59 Uhr
Hallo zusammen,

also das vbs-Skript von bastla funktioniert ganz hervorragend.
Feine Sache.

Vielen Dank.

Viele Grüße
Martin
Bitte warten ..
Mitglied: blacksun
11.09.2008 um 23:01 Uhr
Hallo bastla,

also das vbs-Skript funktioniert ganz hervorragend.
Feine Sache.

Vielen Dank.

Viele Grüße
Martin
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Mehrere Zeilen aus einer Anzahl von Textdateien per Batch entfernen

gelöst Frage von lukeskywalker501Batch & Shell4 Kommentare

Hi Leute, erst mal ein dickes moin an euch ! Ich habe folgende Sache und hoffe das ihr mir ...

Batch & Shell

Mehrere Dateien in einer Textdatei per batch oder script zusammenführen

gelöst Frage von HausbootBatch & Shell24 Kommentare

Guten Tag in die Runde der Fachleute. Ich habe folgendes Problem: In einem Unterordner liegen Dateien mit verschiedenen Dateinamen ...

Batch & Shell

Batch oder Powershell: Teile einer Textdatei kopieren (mehrere Zeilen)

gelöst Frage von ole-objektBatch & Shell5 Kommentare

Hallo, ich habe mehrere txt-Dateien, in denen jeweils mehrere Abschnitte mit Daten vorliegen. Nun möchte ich jede dieser Textdateien ...

Batch & Shell

Textdatei verschlüsseln per Batch

gelöst Frage von Nick2212Batch & Shell22 Kommentare

Hi Leute ich wollte einmal fragen ob es eine Möglichkeit gibt, den Inhalt einer Textdatei per Batch zu verschlüsseln ...

Neue Wissensbeiträge
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 7 StundenHumor (lol)1 Kommentar

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 20 StundenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 20 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 23 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing19 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...