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 txt mit Batchskript aussortieren

Frage Entwicklung Batch & Shell

Mitglied: Magnuts

Magnuts (Level 1) - Jetzt verbinden

14.07.2010, aktualisiert 16:38 Uhr, 3338 Aufrufe, 11 Kommentare

Hallo zusammen,

Ich hab ein kleines Problem und würde mich über euere Hilfe freuen.

Das Ausgangsdokument um das es geht, behinhaltet etwa folgendes:

010-070200|Lorem ipsum dolor sit amet|
010-030160|consetetur sadipscing elitr|
020-070100|sed diam nonumy eirmod tempor|
010-070200|Lorem ipsum dolor sit amet|
020-070100|invidunt ut labore et dolore magna aliquyam erat|
020-040110|Stet clita kasd gubergren|
010-070100|sed diam voluptua|
010-030160|consetetur sadipscing elitr|

Mein Wunsch ist es nun, dieses Dokument mit Hilfe einer Batchdatei zu sortieren. Und zwar sollten Zeilen,
die mit der gleichen Nummer anfangen z.B. 010-070200, aus der Datei gelöscht werden (nur die Duplikate sollen gelöscht werden).
Wichtig ist, dass am Ende die Reihenvolge der Zeilen in der sie ursprünglich in dem Dokument standen weiterhin beibehalten wird.

Das heißt, dass das Dokument nach der durchlauf der Batch folgendermaßen aussehen sollte:

010-070200|Lorem ipsum dolor sit amet|
010-030160|consetetur sadipscing elitr|
020-070100|sed diam nonumy eirmod tempor|
020-040110|Stet clita kasd gubergren|
010-070100|sed diam voluptua|

Ich hoffe mir kann jemand bei dem Problem behilflich sein!

Danke und Gruß

Magnuts
Mitglied: 60730
14.07.2010 um 16:33 Uhr
Moin,

  • kennst du sort /?
  • ist der Aufbau der Datei immer ???-??????|xyz?

Wenn ja - Lösung einfach

Gruß
Bitte warten ..
Mitglied: Magnuts
14.07.2010 um 16:53 Uhr
Hallo TimoBeil,

Du hast recht, die Überschrift war wirklich schlecht gewählt!

Die Zahl am Anfang einer Zeile besteht immer aus 10 Zeichen.
Im Endeffekt sollte das Skript das File durchlaufen und alle Zeilen, in der die ersten 10 Zeichen schon einmal im Dokument vor kamen löschen.

Bei einem sort /+10 werden doch die Zeilen anhand der ersten 10 Zeichen verglichen und anschließend sortiert. Stimmt das soweit?
An sich wäre dies, das was ich brauche, doch sollte, wie erwähnt die Reihenfolge nicht verändert werden.

Entschuldigung für die anfänglichen Fehler meinerseits.

Gruß
Magnuts
Bitte warten ..
Mitglied: LotPings
14.07.2010 um 17:02 Uhr
Hallo Magnuts,
geht viel einfacher auch ohne sortieren. (wenn auch nicht sehr effizient)

Die For Schleife trennt die Eingabezeile am | und prüft vor dem Schreiben in die neue Datei ob die Zahl dort schon vorkommt.
Wenn nicht, wird die aktuelle Zeile neu zusammengebaut und geschrieben.

01.
:: Magnuts.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
:: LotPings  administrator.de 2010-07-14 
03.
@echo off & setlocal EnableDelayedExpansion 
04.
Set Dok="Ausgang.txt" 
05.
Set Neu="Neu.txt" 
06.
Type NUL > %Neu% 
07.
For /F "Usebackq Tokens=1,2 delims=|" %%A in ( %Dok%  
08.
  ) Do Findstr "%%A" %Neu% >NUL 2>&1 || >>%Neu% Echo.%%A^|%%B^|
Das anschließend notwendige Umbenennen überlasse ich dir.

Gruß
LotPings
Bitte warten ..
Mitglied: 60730
14.07.2010 um 17:36 Uhr
Zitat von LotPings:
Hallo Magnuts,
geht viel einfacher auch ohne sortieren. (wenn auch nicht sehr effizient)
@ lot - so einfach ist wohl nicht - die | gehören wohl zum Blindtext und nicht zur Aufgabe.
deswegen schrub ich ja "Lösung einfach" - aber im Moment hab ich was anderes um die Ohren...

Gruß
Bitte warten ..
Mitglied: LotPings
14.07.2010 um 17:44 Uhr
Zitat von 60730:
@ lot - so einfach ist wohl nicht - die | gehören wohl zum Blindtext und nicht zur Aufgabe.
deswegen schrub ich ja "Lösung einfach" - aber im Moment hab ich was anderes um die Ohren...
Stimmt du hast ja senkrecht

Am Prinzip ändert es aber nichts:

01.
:: Magnuts2.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
:: LotPings  administrator.de 2010-07-14 
03.
@echo off & setlocal EnableDelayedExpansion 
04.
Set Dok="Ausgang.txt" 
05.
Set Neu="Neu.txt" 
06.
Type NUL > %Neu% 
07.
For /F "Usebackq delims=" %%A in ( %Dok%  
08.
  ) Do Set "Line=%%A"&Findstr "!Line:~0,10!" %Neu% >NUL 2>&1 || >>%Neu% Echo.%%A
Gruß
LotPings
Bitte warten ..
Mitglied: Magnuts
15.07.2010 um 14:14 Uhr
Zitat von 60730:
@ lot - so einfach ist wohl nicht - die | gehören wohl zum Blindtext und nicht zur Aufgabe.
deswegen schrub ich ja "Lösung einfach" - aber im Moment hab ich was anderes um die Ohren...

Gruß

Zum Blindtext gehört es nicht direkt. Ich habe den Inhalt der txt sehr vereinfacht, um die Lösung dann selbstständig anzupassen.
Wahrscheinlich gestaltet sich das Problem dann aber doch etwas schwieriger, hier eine Zeile aus dem Dokument (die Pipes gehören tatsächlich in die Zeile):

010-070200|TEXT|text|text|||||||||||||||Text|

Der Aufbau ist folgender:
10 Stellen -> Nummer, Pipe,Text, Pipe, Text, Pipe, Text, 15 x Pipe, Text, Pipe

d.h. nach 19 x Pipe kommt immer die nächste Zahl (in der nächsten Zeile)

Danke und Gruß
Magnuts
Bitte warten ..
Mitglied: LotPings
15.07.2010 um 14:46 Uhr
Hallo Magnuts,
Ich versuche das mal in eine akzeptable Form zu übersetzen:

Liebe Leute vielen Dank für Eure Mühe, ich war wohl zu
[ _] blöd , [_] dumm, [_] ungschickt, [_] unerfahren - mein Problem von Anfang an präzise zu beschreiben,
und es tut mir Leid unnötigen Aufwand verursacht zu haben.

Die Batche funktionieren so nicht,
könnt ihr mir bitte nochmal unter Berücksichtigung der erst jetzt nachgereichten Fakten eine Lösung erarbeiten?

Falls das deine Zustimmung findet lass es und wissen .. und Tschüss LotPings ( es war/ist eine heiße Woche )
Bitte warten ..
Mitglied: Magnuts
16.07.2010 um 10:47 Uhr
Zitat von LotPings:
Liebe Leute vielen Dank für Eure Mühe, ich war wohl zu
[ _] blöd , [_] dumm, [_] ungschickt, [_] unerfahren - mein Problem von Anfang an präzise zu beschreiben,
und es tut mir Leid unnötigen Aufwand verursacht zu haben.

Die Batche funktionieren so nicht,
könnt ihr mir bitte nochmal unter Berücksichtigung der erst jetzt nachgereichten Fakten eine Lösung erarbeiten?

Ja, das findet Zustimmung meinerseits, [x]ungeschickt und [x]unerfahren würden an dieser Stelle meiner Meinung nach gut passen.

Tut mir Leid, wegen dem unnötigen Aufwand für euch. Ich dachte dass ich die Aufgabe etwas vereinfachen kann, aber im endeffeckt hab ich damit eine ganz andere Aufgabenstellung erzeugt. Ich bitte euch trotz den Missverständnissen und Fehlern meinerseits, mir eine kleine Hilfestellung zu dem Problem zu geben.

Gruß
Magnuts
Bitte warten ..
Mitglied: LotPings
16.07.2010 um 11:23 Uhr
Hallo Magnuts,

Problem bei den bisherigen Batchversionen ist, das die Pipezeichen Escaped werden müssen, bei nur 2 kann man die nachbilden. Bei mehreren muss man das per Stringersetzung machen.
01.
:: Magnuts3.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
:: LotPings  administrator.de 2010-07-16 
03.
@echo off & Setlocal EnableDelayedExpansion 
04.
set Prompt=$G 
05.
Set Dok="Ausgang.txt" 
06.
Set Neu="Neu.txt" 
07.
Type NUL > %Neu% 
08.
For /F "Usebackq delims=" %%A in ( %Dok%  
09.
  ) Do Set "Line=%%A"&Findstr "!Line:~0,10!" %Neu% >NUL 2>&1 || CAll :LineOut 
10.
Goto :eof 
11.
:LineOut 
12.
Set "Line=%Line:|=^|%" 
13.
>>%Neu% Echo.%Line%
Gruß
LotPings
Bitte warten ..
Mitglied: Magnuts
23.07.2010 um 13:01 Uhr
Hallo LotPings,

Danke für deine Hilfe, hab das Problem in Griff bekommen! Läuft jetzt alles wie gewollt :D

Gruß
Magnus
Bitte warten ..
Mitglied: LotPings
23.07.2010 um 13:15 Uhr
Hallo Magnuts,

so schön es ist, wenn ein Thema erledgt abgehakt werden kann, noch besser wäre es,
wenn du beschreibst was und wie dir Deine Lösung gelungen ist - Ratsuchende können es dann vielleicht auch nachvollziehen.

Gruß
LotPings
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Webentwicklung
gelöst 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 ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

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

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...