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

Zeilen in txt mit Batchskript aussortieren

Frage Entwicklung Batch & Shell

Mitglied: Magnuts

Magnuts (Level 1) - Jetzt verbinden

14.07.2010, aktualisiert 16:38 Uhr, 3357 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Verknüpfungspfad mittels Batchskript anpassen (5)

Frage von kkh5997 zum Thema Batch & Shell ...

PHP
gelöst TXT Datei auslesen und bestimmte Zeilen in Variable setzen (11)

Frage von 126594 zum Thema PHP ...

Batch & Shell
gelöst Batch sucht bestimmten "text" in einer .txt datei und soll dann die Zeile anzeigen (6)

Frage von MedicalAd zum Thema Batch & Shell ...

Neue Wissensbeiträge
Humor (lol)

Wo ist der Fehler auf dem Bild?

(2)

Information von the-buccaneer zum Thema Humor (lol) ...

Windows Update

Offenbar erneutes MS-Update mit Fehlerschleife (2012 R2)

Information von VGem-e zum Thema Windows Update ...

Windows Installation

Unorthodoxer Weg, um an einen Offline-Installer für Adobe Flash zu kommen

(14)

Tipp von beidermachtvongreyscull zum Thema Windows Installation ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Proxy Server Settings Cloud + EWS (17)

Frage von SomebodyToLove zum Thema Exchange Server ...

Windows Server
PDF Editor für den Einsatz auf Terminal Servern (16)

Frage von kwame501 zum Thema Windows Server ...

Windows Installation
Unorthodoxer Weg, um an einen Offline-Installer für Adobe Flash zu kommen (14)

Tipp von beidermachtvongreyscull zum Thema Windows Installation ...

Virtualisierung
Unterschied zwischen VDI und Terminal Server Lösungen (13)

Frage von tukawi06 zum Thema Virtualisierung ...