Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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
GELÖST

Doppelte Datensätze aus einer txt-Datei löschen

Frage Entwicklung Batch & Shell

Mitglied: ChrisM73

ChrisM73 (Level 1) - Jetzt verbinden

08.12.2008, aktualisiert 10.12.2008, 5508 Aufrufe, 6 Kommentare

Hallo ich habe das Problem das ich eine sehr lange Textdatei,mit Datensätzen habe und diese darf keine Leerzeilen oder doppelte oder gar 3 oder 4 fach die gleichen Datensätze enthält.
Die Datei sieht ungefähr so aus:

0114008,V00016317,0811422,1,20081205,000186CC.000,888,1,269,01,861,10,850,10
0114008,V00016317,0811422,1,20081205,000186CD.000,888,1,269,01,861,10,850,10
0114008,V00691087,0713420,1,20081205,00013292.000,888,1,090,01,278,01,269,01,240,01,861,10,850,10
0114008,V00691087,0713420,1,20081205,000132CE.000,888,1,090,01,278,01,269,01,240,01,861,10,850,10
0114008,V00691087,0713420,1,20081205,00013520.000,888,1,090,01,278,01,269,01,240,01,861,10,850,10
0114008,V00691087,0713420,1,20081205,0001367E.000,888,1,090,01,278,01,269,01,240,01,861,10,850,10
0114008,V02569433,0576220,1,20081205,00018991.000,888,1,090,01,278,01,269,01,240,01,861,10,850,10
0114008,V02569433,0576220,1,20081205,00018992.000,888,1,090,01,278,01,269,01,240,01,861,10,850,10

0114008,V02770806,0516610,1,20081205,00019440.000,888,1,090,01,278,01,240,01
0114008,V02770806,0516610,1,20081205,0001944D.000,888,1,090,01,278,01,269,01
0114008,V03885491,0516610,1,20081205,00019443.000,888,1,090,01,278,01,269,01
0114008,V03885491,0516610,1,20081205,0001944F.000,888,1,090,01,278,01,269,01
0114008,V04212450,0516610,1,20081205,00019442.000,888,1,090,01,278,01,269,01
0114008,V04212450,0516610,1,20081205,0001944E.000,888,1,090,01,278,01,269,01

und sollte danach so aussehen:

0114008,V00016317,0811422,1,20081205,000186CC.000,888,1,269,01,861,10,850,10
0114008,V00691087,0713420,1,20081205,00013292.000,888,1,090,01,278,01,269,01,240,01,861,10,850,10
0114008,V02569433,0576220,1,20081205,00018991.000,888,1,090,01,278,01,269,01,240,01,861,10,850,10
0114008,V02770806,0516610,1,20081205,00019440.000,888,1,090,01,278,01,240,01
0114008,V03885491,0516610,1,20081205,0001944F.000,888,1,090,01,278,01,269,01
0114008,V04212450,0516610,1,20081205,00019442.000,888,1,090,01,278,01,269,01

wichtig ist eigentlich nur falls die ersten beiden Zahlen gleich sind das dann einer von beiden Sätzen gelöscht wird.

wie kann ich das am besten automatisiert machen?
Mitglied: bastla
08.12.2008 um 19:16 Uhr
Hallo ChrisM73!

Falls Dich das Verschwinden von Leerzeilen sowie die Tatsache, dass das Ergebnis sortiert ist, nicht stören sollten, etwa so:
01.
@echo off & setlocal 
02.
set "Datei=D:\Ausgangsdatei.txt" 
03.
set "Bak=.bak" 
04.
 
05.
sort "%Datei%" /o "%Datei%%Bak%" 
06.
del "%Datei%" 
07.
set Zuletzt="," 
08.
for /f "usebackq tokens=1,2* delims=," %%i in ("%Datei%%Bak%") do set "Zeile=%%i,%%j,%%k" & call :ProcessLine "%%i%%j" 
09.
goto :eof 
10.
 
11.
:ProcessLine 
12.
if %1==%Zuletzt% goto :eof 
13.
set Zuletzt=%1 
14.
>>"%Datei%" echo %Zeile% 
15.
goto :eof
Die Daten aus der ursprünglichen Datei stehen (sortiert, Leerzeilen am Anfang der Datei) als "Originaldatei.bak" weiterhin zur Verfügung (falls ein echtes Backup benötigt wird, einfach vorweg noch ein "copy" einbauen), die Ausgangsdatei wird durch die neue Fassung (ohne Duplikate) ersetzt.

Grüße
bastla

[Edit] Leerzeichen nach "/o" ergänzt. [/Edit]
Bitte warten ..
Mitglied: ChrisM73
09.12.2008 um 10:43 Uhr
Hallo Bastla,
vielen Dank für deine Hilfe, allerdings bringt er mir nen Fehler, habs im Dos-Fenster ausgeführt,bei sort "P:\Ausgangsdatei.txt" /o"P:\Ausgangsdatei.txt.bak" bringt er den Fehler ungültige Funktion. Was ist daran falsch?
Bitte warten ..
Mitglied: bastla
09.12.2008 um 11:15 Uhr
Hallo ChrisM73!

Ein Leerzeichen nach dem "/o" sollte das Problem beheben (ich habe das oben auch nachgetragen).

Grüße
bastla
Bitte warten ..
Mitglied: ChrisM73
09.12.2008 um 11:23 Uhr
Hallo Bastla,
super jetzt läuft es!!! Allerdings habe ich noch was übersehen. Wenn die ersten 2 Zahlen einer Zeile bei 2 Zeilen gleich sind soll er auch eine Zeile von den beiden löschen.
Wie kann man das noch implementieren?

also wenn der Datensatz folgende Zeilen enthalten würde:

0021145,V07658465,01,544,01,584,01,582
0021145,V07658465,01,544,01,584

dann sollte nur noch dieser übrigbleiben:

0021145,V07658465,01,544,01,584,01,582
Bitte warten ..
Mitglied: bastla
10.12.2008 um 11:06 Uhr
Hallo ChrisM73!
Wenn die ersten 2 Zahlen einer Zeile bei 2 Zeilen gleich sind soll er auch eine Zeile von den beiden löschen.
Wie kann man das noch implementieren?
Eigentlich sollte das bereits so funktionieren ...

Du könntest die Zeile 12 ändern auf
if /i %1==%Zuletzt% goto :eof
Da in den "Zahlen" offensichtlich auch Buchstaben enthalten sein können, sorgt das "/i" dafür, dass Groß-/Kleinschreibung nicht unterschieden wird (auch, wenn das kein Problem sein sollte, schadet's nicht).

Grüße
bastla
Bitte warten ..
Mitglied: ChrisM73
10.12.2008 um 11:20 Uhr
Super, das wars, vielen Dank hast mir sehr viel händische Arbeit erspart...
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Doppelte Dateneinträge per Batch aus Datei löschen? HILFE (7)

Frage von freshman2017 zum Thema Batch & Shell ...

Windows Server
gelöst Windows 2012R2 kann Datei nicht löschen (2)

Frage von Akcent zum Thema Windows Server ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Monitoring
Netzwerk-Monitoring Software (18)

Frage von Ghost108 zum Thema Monitoring ...

Windows 10
Seekrank bei Windows 10 (17)

Frage von zauberer123 zum Thema Windows 10 ...

Windows Server
gelöst Kopiervorgang schlägt fehl, weil Datei- und Ordnername zu lang sind (14)

Frage von Schroedi zum Thema Windows Server ...

Windows 10
Windows 10 Fall Creators Update Fehler (13)

Frage von ZeroCool23 zum Thema Windows 10 ...