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

Zwei Textdateien miteinander zeilenweise parallel vergleichen

Frage Entwicklung Batch & Shell

Mitglied: dedalus2011

dedalus2011 (Level 1) - Jetzt verbinden

15.07.2012, aktualisiert 15:54 Uhr, 3471 Aufrufe, 9 Kommentare

Ich habe eine Textdatei1, die ich mit einer anderen Textdatei2 vergleichen möchte. Die Zeilen sind in den Dateien gleich angeordnet. Also möchte ich jede Zeile aus Textdatei1 mit den Zeilen aus Textdatei2 parallel vergleichen. Ist die Zeile vorhanden, soll die nicht überschrieben werde Ist sie nicht vorhanden, soll die geschrieben werden. Mit geschachtelten for-schleifen,etwa durch

01.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Textdatei2%"')  
02.
do (for /f "tokens=1* delims=:" %%j in ('findstr /n "^" "%Textdatei1%"') do set "Zeile=%%j" && echo %%i && call :Line) 
geht nicht, da die Indexes von den zwei for schleifen nicht parallel verarbeitet werden können. Gibt's da Workarounds? Ideen?

Also so ungefähr:

Textdatei2.txt:

1. String_A
2. String_B
3. String_C

Textdatei1.txt:

1. String_A
2. String_C

Also wenn die erste Zeile von der Textdatei2 (1.String_A) die gleiche ist wie diejenige von Textdatei1(1.String_A) dann soll die Zeile von der Textdatei 1 nicht überschrieben werden sonst soll sie überschrieben werden.

Wenn die zweite Zeile von der Textdatei2 (1.String_B) die gleiche ist wie diejenige von Textdatei1(1.String_C) dann soll die Zeile von der Textdatei 1 nicht überschrieben werden sonst soll sie überschrieben werden.

..usw

Danke für Eure Tipps

Gruß
dedalus2011
Mitglied: bastla
15.07.2012, aktualisiert um 17:46 Uhr
Hallo dedalus2011!

Könntest Du vielleicht noch erklären, was mit "soll/soll nicht überschrieben werden" gemeint ist und was eigentlich das gewünschte Ergebnis (ebenfalls beispielhaft dargestellt) wäre?

Interessieren könnte Dich aber jedenfalls der Beitrag Zwei Texte Zeilenweise zusammenfügen per batch ...

Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
15.07.2012, aktualisiert um 18:12 Uhr
Hallo dedalus2011,

soweit ich das jezt erkenne würde doch danach Datei1 genauso wie Datei2 aussehen, oder?

Naja einfach ausgedrückt, du Überschreibst Datei1 mit Datei2.
Ist viel einfacher als ein Zeilenvergleich.

Grüße
Darkprodukt
Bitte warten ..
Mitglied: dedalus2011
15.07.2012 um 18:15 Uhr
das alles ist Teil eines Skripts der Zeilen von der Textdatei 2 in die Textdatei1 nur dann zurückschreiben soll wenn diese Zeilen in der Textdatei1 nicht mehr vorhanden sind. Die Anordnung der Zeilen in der Textdatei2 soll dabei erhalten sein.

Der Skript soll aber keine Zeilen in der Textdatei 1 überschreiben wenn diese bereits da sind.

Es ist eine Art "restore" aber ohne unnötiges Überschreiben/Verarbeiten. Es sind Textdateien die eine sehr hohe Anzahl an Zeilen haben und mit "findstr" verarbeitet werden. Dadurch dass die Zeilen die bereits da sind nicht mehr verarbeitet werden könnte die Laufzeit verbessern. Meine Überlegung halt...Geht das irgendwie?

Danke für jeglichen Hinweis

Gruß
dedalus2011
Bitte warten ..
Mitglied: Darkprodukt
15.07.2012, aktualisiert um 18:23 Uhr
Naja wo wir gerade von Laufzeit sprechen.

Mir wurde gesagt das jeder Aufruf von finstr ~250ms Dauert.
Da erscheint mir ein einfaches überschreiben sehr viel einfacher.

Abgesehen davon.
In deinem Beispiel fehlt der Datei1 ja der String_B also würde der String_C ja mit String_B überschrieben werden.
Jezt wird danach auf String_C gestestet, der aber nicht mehr existiert, also würde String_D mit String_C überschrieben werden.

etc.pp.

Ich kan einfach nur empfehlen. Überschreib die Datei einfach.

Textdatein sind meistens nicht 1GB groß. Das ist nehmlich meist die Zeit wo das Warten vom Kopiervorgang nervt.

Grüße
Darkprodukt
Bitte warten ..
Mitglied: bastla
15.07.2012 um 18:23 Uhr
Hallo dedalus2011!

Das klingt dann aber für mich so, wie es Darkprodukt schon interpretiert hat - soll demnach als Ergebnis der Inhalt der Textdatei 1 jenem von Textdatei 2 entsprechen (gleiche Zeilen bleiben unverändert, fehlende Zeilen werden ergänzt) oder kann es dann doch noch Unterschiede geben (weil etwa in Textdatei 1 Zeilen enthalten waren, die es in Textdatei 2 nicht gibt)?

Grüße
bastla
Bitte warten ..
Mitglied: dedalus2011
15.07.2012, aktualisiert um 19:17 Uhr
Sorry,da habe ich mich falsch ausgedrückt. Der Skript verteilt aus der Ursprungsdatei (Textdatei2) Zeilen in verschiedenen Dateien (aufwändige "findstr" Operationen). Durch einen Systemausfall könnte z.B. die Ausführung des Skripts abgebrochen werden und die Zieldateien (Textdatei1 und Textdatei2) bleiben unvollständig.

Ein restore durch ein einfaches überschreiben der Dateien mit der Ursprungsdatei ist daher keine Option. Meine Frage ist ja ob es möglich wäre die lange Laufzeit einer erneuten Ausführung des Skripts dadurch zu vermeiden, indem man zuerst prüft ob die Zeilen bereits da sind.

Eine mögliche Verteilung könnte so aussehen:

Ursprungsdatei.txt:

1. String_A
2. String_B
3. String_C

Textdatei1.txt:

1. String_A
2. String_C - fehlt, konnte wegen Skriptabbruch nicht geschrieben werden

Textdatei2.txt
2. String_B


Angenommen Textdatei1.txt konnte wegen einem Skriptabbruch nicht komplett geschrieben werden (z.B. string_C fehlt), sollte jetzt ein restore zuerst prüfen welche Zeilen aus der ersten (und der zweiten Textdatei) bereits vorhanden sind und von der Ausführungslogik der Filterung ausgeschlossen werden können (es sollen also keine teuren "findstr" operationen mehr ausgeführt werden für diese zeilen).
In dem Fall,würde die Filterung nur auf den fehlenden String_C angewandt.

Geht das irgendwie? Wenn nötig kann ich den kompletten Skript hier posten


Gruß
dedalus2011
Bitte warten ..
Mitglied: Darkprodukt
15.07.2012 um 19:32 Uhr
Ok,

Also soll die Batch jede Zeile von Ursprungsdatei.txt Prüfen und feststellen ob diese sich in Textdatei1.txt oder Textdatei2.txt befindet.

Sobald eine Zeile Fehlt, kan das Script abbrechen und dem lengen Verteilerscript
die Zeile mitteilen an der es Fortfahren soll.

Richtig?
Bitte warten ..
Mitglied: dedalus2011
15.07.2012 um 20:22 Uhr
Ja, das wäre die Idee.. Wäre super wenn es klappen würde

Gruß
dedalus2011
Bitte warten ..
Mitglied: Darkprodukt
16.07.2012, aktualisiert um 14:22 Uhr
Ok,

Es wäre dann Hilfreich, wenn du den Quellcode des verteilers Posten würdest.

Dann wird dabei Warscheinlich auch die Frage geklärt, wie man die Zeilennummer an dieses Weitergibt.

Grüße
Darkprodukt
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Zwei Mysql-Datenbanken miteinander vergleichen
gelöst Frage von trallerDatenbanken2 Kommentare

Hallo, ich möchte unter Windows den Inhalt zweier Mysql-Datenbanken vergleichen. Die Datenbanken liegen als .sql vor, und sind auch ...

Windows Server
AD-Berechtigungen von zwei Servern miteinander vergleichen
Frage von s0m3tingWindows Server3 Kommentare

Hallo, ich habe einen Kunden, der einen Dell T620 betreibt. Auf diesem läuft Windows Server 2012R2 mit Hyper-V. In ...

Batch & Shell
Textdatei zeilenweise in Variable schreiben
gelöst Frage von goodbytesBatch & Shell20 Kommentare

Hallo, mit einer Batch möchte ich mehrere Laufwerke mappen, abhängig vom Usernamen. Klar könnte ich auch für jeden User ...

VB for Applications
Textdatei zeilenweise nach Datum sortieren
gelöst Frage von GurkenhobelVB for Applications2 Kommentare

Hallo Gemeinde, mehrere umfangreiche Textdateien, in denen zeilenweise wichtige Daten und Termine eingetragen sind, sollen zeilenweise nach dem Datum ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 106 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless8 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing7 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...