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

.txt Dateien auf Duplikate überprüfen und diese löschen

Frage Entwicklung IDE & Editoren

Mitglied: DaSilva

DaSilva (Level 1) - Jetzt verbinden

23.01.2009, aktualisiert 11:56 Uhr, 8982 Aufrufe, 7 Kommentare

Ich möchte mehrere Textdateien zu einer großen zusammenfügen und diese Datei dann auf Duplikate überprüfen.
Das Zusammenfügen klappt gut, das Überprüfen auf Duplikate nicht so.
Mit UltraEdit kann man zwar gut Duplikate löschen lassen, allerdings nicht nur aufgrund der ersten Spalten.
Beispiel:

Eintrag1 blub
Eintrag1
Eintrag1

Ergebnis:


Eintrag1 blub
Eintrag1

Es soll aber so aussehen:

Eintrag1

Es sollen also nur die Zeichen bis Spalte x überprüft werden und davon dann alle Duplikate gelöscht werden.
Hat jemand eine Idee wie das geht?
Danke.
Mitglied: NetWolf
23.01.2009 um 13:00 Uhr
Hallo,

wenn man wüste, warum das so gemacht werden soll, würde ich empfehlen, vorher den Inhalt der Dateien auf Dubletten zu prüfen.


Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)
Bitte warten ..
Mitglied: DaSilva
23.01.2009 um 13:18 Uhr
Jede einzelne Datei hat als Inhalt nur einzigartige Einträge.
Es handelt sich um regelmäßige Reports und da werden beim nächsten Report noch sehr viele Einträge vom vorherigen übernommen, da nicht geändert im Status.
Ich brauche jetzt eine Zusammenfassung aller bisherigen Reports in einer Datei ohne Duplikate und dabei sind mir nur die Einträge bis Spalte 20 wichtig.
Deswegen kann ich an der Ausgangssituation leider nichts ändern...
Bitte warten ..
Mitglied: NetWolf
23.01.2009 um 14:30 Uhr
ich würde die Dateien in eine Datenbank (z.B. Access oder Base) einlesen, auswerten, fertig


Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)
Bitte warten ..
Mitglied: bastla
23.01.2009 um 16:29 Uhr
Hallo DaSilva!

Soferne es nicht stört, dass im Ergebnis keine Leerzeilen enthalten sein werden, müsste folgender Batch genügen:
01.
@echo off & setlocal 
02.
set "Datei=D:\Report.txt" 
03.
set "Bak=.bak" 
04.
 
05.
move "%Datei%" "%Datei%%Bak%" 
06.
copy nul "%Datei%">nul 
07.
for /f "usebackq delims=" %%i in ("%Datei%%Bak%") do set "Zeile=%%i" & call :ProcessLine 
08.
del "%Datei%%Bak%" 
09.
goto :eof 
10.
 
11.
:ProcessLine 
12.
findstr /b /c:"%Zeile:~,20%" "%Datei%">nul || >>"%Datei%" echo %Zeile% 
13.
goto :eof 
Falls Du die Originalversion als Sicherung behalten möchtest (wird dann beim nächsten Batchlauf durch die dann aktuelle Datei überschrieben), die Zeile 8 durch das Voranstellen von "::" auskommentieren ...

Grüße
bastla
Bitte warten ..
Mitglied: DaSilva
23.01.2009 um 16:54 Uhr
Danke, scheint zu funktionieren. Leerzeichen bleiben auch drin.
Braucht zum Ende hin (von der Dateigröße her gesehen) ziemlich lange.
Kann man noch einen Status (etwa "processing line 342...") einbauen?
Bitte warten ..
Mitglied: bastla
23.01.2009 um 17:07 Uhr
Hallo DaSilva!

Wie schon erwähnt werden Leerzeilen übersprungen, alle anderen Zeilen werden allerdings gezählt:
01.
@echo off & setlocal 
02.
set "Datei=D:\Report.txt" 
03.
set "Bak=.bak" 
04.
set /a LineNo=0 
05.
 
06.
move "%Datei%" "%Datei%%Bak%" 
07.
copy nul "%Datei%">nul 
08.
for /f "usebackq delims=" %%i in ("%Datei%%Bak%") do set "Zeile=%%i" & call :ProcessLine 
09.
del "%Datei%%Bak%" 
10.
goto :eof 
11.
 
12.
:ProcessLine 
13.
set /a LineNo+=1 
14.
echo processing Line %LineNo% 
15.
findstr /b /c:"%Zeile:~,20%" "%Datei%">nul || >>"%Datei%" echo %Zeile% 
16.
goto :eof 
Dass es gegen Ende zäh wird liegt einfach daran, dass jede Zeile, bevor sie in die Ergebnisdatei geschrieben wird, zunächst in dieser Datei gesucht wird - wird sie nicht gefunden (was aber erst feststeht, wenn die gesamte Datei durchsucht wurde), kann sie geschrieben werden ...

Wären die Zeilen sortiert, müsste jede gelesene Zeile immer nur mit der letzten geschriebenen Zeile verglichen werden, was eine kürzere Laufzeit ermöglichen sollte, aber hier wohl nicht möglich sein dürfte ...

Grüße
bastla
Bitte warten ..
Mitglied: DaSilva
23.01.2009 um 23:05 Uhr
Super, danke

Wie soll ich bloß die restlichen Zeichen füllen?
Ah, geschafft ;)
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell: Dateien nach Version löschen in mehreren Ordnern (4)

Frage von ImmerKind zum Thema Batch & Shell ...

Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...