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

gelöst doppelte einträge aus textdatei entfernen mittels batch

Mitglied: meckatzermichel

meckatzermichel (Level 1) - Jetzt verbinden

25.01.2006, aktualisiert 11.02.2007, 15932 Aufrufe, 7 Kommentare

hallo,

ich habe ein txt-file welches ich mittels einer for-schleife aus einem logfile nach suchkriterien extrahiere (ich poste das batchfile mal weiter unten).

leider stehen im logfile einträge doppelt drin. ich möchte aber jede zeile nur einmal haben.
sieht ungefähr so aus:
9:48:57 user1
9:48:57 user1
9:50:30 user4
9:50:30 user4

gibt es eine möglichkeit doppelte zeilen zu entfernen? evtl. schon im ersten batchfile ?

gruss
meckatzermichel

hier meine batch:
FOR /f "tokens=1,3,4,5" %%f IN (lmgrd.log) DO call :ausgabe %%f %%g %%h %%i
goto :eof

:ausgabe
if "%~2"=="DENIED:" echo %~2 %~3 %~1 %~4 >> logfileneu.txt
Mitglied: Biber
25.01.2006 um 13:03 Uhr
Moin meckatzermichel,

wenn ich Dich richtig verstehe, redest Du von Tages-Logfiles (im Logfile scheint ja nur die Zeitangabe zu stehen?) Ich kann Deine 4 Parameter schwer interpretiern, weil ich nur zwei sehe in dem Beispiel.
Egal, sinngemäß so:
::~~~~~~~
@echo off & setlocal
FOR /f "tokens=1,3,4,5" %%f IN (lmgrd.log) DO call :ausgabe %%f %%g %%h %%i
goto :eof

:ausgabe
if "%~2"=="DENIED:" (find "%~3 %~1 %~4" logfileneu.txt || echo %~2 %~3 %~1 %~4 >> logfileneu.txt)
goto :eof
:.~~~~~~~~

...wobei das "find "%~3 %~1 %~4" ... die suche nach den "doppelten" Werten sein soll.
Ich habe mal im Beispiel den Parameter %~2 weggelassen; der soll mal die Uhrzeit sein.

Hoffe, ich habe Dein Problem richtig verstanden, sonst mach btte noch mal den Zustand der Ausgangs-Logdatei deutlicher.

HTH Biber
Bitte warten ..
Mitglied: meckatzermichel
25.01.2006 um 13:30 Uhr
hi biber,

ja es handelt sich um tageslogs.
sorry, dass ich nicht alles von der ausgangsdatei gepostet habe. die sieht ungefähr so aus:

------schnipp-------------------------------------------


6:03:08 blablabla
6:03:08 blablabla
9:46:45 (irgendwas) OUT: "programm" user5
9:47:26 (irgendwas) OUT: "programm" user1
9:48:57 (irgendwas) DENIED: "programm" user2
9:48:57 (irgendwas) DENIED: "programm" user2
9:50:30 (irgendwas) DENIED: "programm" user8
9:50:30 (irgendwas) DENIED: "programm" user8
------------------schnapp--------------------------------

hieraus brauch ich nur die zeilen mit DENIED. (und zwar die felder 1,3,4,5). hiervon aber nur imer eine (also keine doppelten).
das ergebnis soll dann so aussehen:

DENIED: programm 9:48:57 user2
DENIED: programm 9:50:30 user8

ich hab mal den code schnippsel mal probiert, aber der tut nicht bei mir.
fehlermeldung:
"6:03:08" ist syntaktisch an dieser Stelle nicht verarbeitbar.

gruss
meckatzermichel

ach ja kannst du das konstrukt mit dem find und || mal erklären? was passiert da genau?
Bitte warten ..
Mitglied: Biber
25.01.2006 um 16:01 Uhr
So, meckatzermichel,
langsam wird das Bild klarer - und der Batch greifbarer.
Wenn Du nur die Zeilen mit dem Text "DENIED" brauchst und nicht gerade Hunderttausende solche Zeilen in der Logdatei lmgrd.log sind, dann würde ich schon in der FOR/F-Anweisung oben eine "gefilterte" Daten(zeilen)menge erzeugen:

FOR /f "skip=2 tokens=1,3,4,5" %%f IN ('find "DENIED" lmgrd.log') DO ....

Einfach vorher testen: Von einer realistischen lmgrd.log mal vom CMD-Prompt aus ein
find "DENIED" lmgrd.log >DENIEDlines.txt
machen und danach die Größe der Datei prüfen.
Wenn deutlich kleiner als 1 MByte ->brauchst du keine Zwischendatei, sondern die oben abgebildete Find-in-Häkchen-Variante.
Wenn deutlich größer als 2 MByte--> dann als Zeile VOR die FOR /F-Schleife:
find "DENIED" lmgrd.log >%temp%\DENIEDlines.txt
FOR /f "tokens=1,3,4,5" %%f IN (%temp%\DENIEDlines.txt) DO call :ausgabe %%f %%g %%h %%i
goto :eof
....so, unten in der "Sub-Routine" :ausgabe kommen 4 Parameter an
1= 9:50:30 Zeit
2= DENIED: -------->den haben alle Sätze
3= "programm"
4= UserN
und das soll in eine neue Logdatei namens logfileneu,txt in der Form/Reihenfolge 2.3,1,4, also
DENIED: "programm" 9.50:30 UserN
Also suchen wir doch vor dem Schreiben in die Logdatei nach diesem String.
Nur wenn der String ""programm" 9.50:30 UserN" NICHT gefunden wird (das war das logische ODER "||) oben), wird ein Neuer Satz geschrieben.


So, all in all können wir Deinen Bätch also ein bisschen vereinfachen:

::~~~~~~~
@echo off & setlocal
find "DENIED" lmgrd.log >%temp%\DENIEDlines.txt
FOR /f "tokens=1,3,4,5" %%f IN (%temp%\DENIEDlines.txt) DO call :ausgabe %%g %%h %%f %%i
goto :eof

:ausgabe
find "%*" logfileneu.txt || echo %*>>logfileneu.txt
:: frei übersetzt: FINDE die Zeile "...." ODER schreibe sie neu.
goto :eof
:.~~~~~~~~

HTH Biber
Bitte warten ..
Mitglied: meckatzermichel
25.01.2006 um 16:58 Uhr
hi biber,

vielen dank. jetzt hab ich es einigermassen kapiert. da muss ich dir ja mal ein bier ausgeben ....
ich mach das mit einem impliziten find ohne zwischendatei (log ist nicht so gross)

mein output sieht jetzt so aus:

DENIED: "programm" 9:48:57 user1
DENIED: "programm" 9:50:30 user5
DENIED: "programm" 9:50:57 user3
DENIED: "programm" 9:51:12 user2
DENIED: "programm" 9:51:52 user4
DENIED: "programm" 9:52:57 user1

das einzige was nun wirklich noch stört sind die striche -------- am anfang der datei
warum sind die überhaupt drin ? kommen die vom find ?

gruss
meckatzermichel
Bitte warten ..
Mitglied: Biber
25.01.2006 um 17:14 Uhr
Uuups, ja, meckatzermichel,
die Striche kommen vom find.
Abhilfe (hab ich im letzten Kommentar unten vergessen):
Vor das Wort "Tokens=.." noch ein "skip=2".

Oben im Posting stehts noch:
FOR /f "skip=2 tokens=1,3,4,5" %%f IN ('find "DENIED" lmgrd.log') DO ....

Denn der Output von Find.... na, probiers selbst am CMD-Prompt...

Über das Thema "Gemeinsam Bierchen trinken" können wir gerne reden....

Biber, der Becks-Trinker aus Bremen
[Edit]
>>guck mal hier: www.meckatzer.de
Hey, da hab ich ja eine gute Quelle aufgetan..
leider wird das immer teurer, so dass ich jetzt auf mönchshof lager umsteig
Na ja, ich brauch ohnehin nur zwei Becks für einen Vollrausch..
...also bekommen wir das mit Meckatzer Löwenbräu auch noch finanziell hin..
Vorher zu klären wäre nur noch:
Du bist doch aber kein FC-Bayern-Fan, oder?? *misstrauisch guck
[/Edit]
Bitte warten ..
Mitglied: meckatzermichel
25.01.2006 um 17:27 Uhr
super klasse. das ist es.
vielen dank.

meckatzermichel

guck mal hier: www.meckatzer.de
leider wird das immer teurer, so dass ich jetzt auf mönchshof lager umsteig
Bitte warten ..
Mitglied: rumpelstielzchen987
11.02.2007 um 18:00 Uhr
Hallo Administratoren,
ist zwar schon etwas veraltet der thread, aber mein neuer würde ein ähnliches thema behandeln, deshalb kommts mal hier rein.

Ich habe eine datei die 200 000 000 000 email adressen enthält (nur ein beispiel!). eine pro zeile. für den unwahrscheinlichen fall, dass eine doppelt drin ist, möchte ich eine davon löschen, sodass jede nur noch einmal vorhanden ist. was hier schon steht klappt bei meiner anwendung irgendwie nicht. auch nicht, wenn ich nur einen token pro zeile habe.

bitte helft mir, ich steig bei dem da oben nicht so recht durch.

danke schön

edit:
hat sich erledigt. bin auf uniq.exe gestoßen (http://david.tribble.com/dos/uniq.exe).
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Doppelte Einträge mit Batch entfernen

gelöst Frage von Kugelschreiber15Batch & Shell8 Kommentare

Hallo Leute, bin grad dabei ein kleines Tool zu basteln und habe nun eine Frage! Ich suche mit Hilfe ...

Batch & Shell

Powershell - Doppelte Einträge einer Textdatei entfernen, BEIDE Einträge

gelöst Frage von TastuserBatch & Shell5 Kommentare

Hallo Ich habe eine Textdatei wo z.B. folgendes steht: Mensch Vogel Mensch Fisch Tier Jetzt möchte ich, dass der ...

Batch & Shell

Leerzeilen per Batch aus Textdatei entfernen

gelöst Frage von Yenne97Batch & Shell9 Kommentare

Hallo Zusammen Ich bin neu hier. Ich würde gerne einen Batch schreiben der: 1. In einer Textdatei alle Leerzeichen ...

Batch & Shell

Mehrere Zeilen aus einer Anzahl von Textdateien per Batch entfernen

gelöst Frage von lukeskywalker501Batch & Shell4 Kommentare

Hi Leute, erst mal ein dickes moin an euch ! Ich habe folgende Sache und hoffe das ihr mir ...

Neue Wissensbeiträge
Microsoft

Neuigkeiten zu Server und Office 365 was läuft mit was und was nicht

Tipp von AlFalcone vor 1 StundeMicrosoft

Server Betriebssysteme auf dem die verschiedenen Offices nicht supported sind: • Office 365 ist und wird nicht supported auf Windows ...

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für einzelne Huawei-Smartphones

Tipp von VGem-e vor 2 StundenSpeicherkarten

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 4 StundenSicherheit

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 18 StundenHardware1 Kommentar

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Windows 10
Sysprep Fehler im Log kann nicht starten
Frage von grillinator95Windows 1022 Kommentare

Hallo, kann leider SYSPREP nicht mehr starten, Win10 64bit. Logfile sagt folgendes: 2018-10-17 13:44:56, Info SYSPRP 2018-10-17 13:44:56, Info ...

Internet
Ist diese URL denkbar (Syntax)?
gelöst Frage von departure69Internet17 Kommentare

Hallo. Der Sohn eines Arbeitskollegen hat im Gymnasium EDV-Unterricht. Leider hat er in der letzten Klassenarbeit einen Fünfer geschrieben. ...

Debian
Linux debian 9 Installation
Frage von Green14Debian16 Kommentare

Hallo zusammen, ich habe mich ein wenig mit Debian auseinandergesetzt und möchte mir eine Standard-Installation als Grundlage für andere ...

Outlook & Mail
Outlook schiebt Mails aus Posteingang sofort in den Papierkorb
Frage von hermesOutlook & Mail13 Kommentare

Hallo Outlook Fachleute, wir haben hier das Problem, dass Outlook 2010 alle ankommenden Mails seit zwei Tagen einfach in ...