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
Kommentar vom Moderator Biber am 20.01.2011 um 08:20:35 Uhr
Original-Titel "Näheste Datum nächst älteres Datum heraussuchen" geändert.
GELÖST

Zu einem vorgegebenen Datum das vorhergehende Istdatum aus einer Logdatei ermitteln

Frage Entwicklung Batch & Shell

Mitglied: mycroftone

mycroftone (Level 1) - Jetzt verbinden

19.01.2011, aktualisiert 20.01.2011, 3081 Aufrufe, 12 Kommentare

Hallo Ich höffe hier auf Hilfe im folgende Sachverhalt

Ich habe eine /mehrere Dateien mit Einträgen von verschiedene Tagen. Also eine Rechner kann mehrere MAC Adresse im Lauf der Zeit haben.

z.B.
File1
01.
Rechner1  |  00-17-A4-F6-C0-3F    |   09.10.2008  |   
02.
Rechner1  |  00-17-A4-F6-C0-2F    |   28.04.2010  |   
03.
Rechner1  |  00-14-38-51-03-11    |   12.10.2009  |   
04.
Rechner1  |  00-15-39-52-04-12    |   03.12.2009  |
oder

File2
01.
Rechner2  |  00-16-A3-F6-C0-3F    |   09.10.2008  |   
02.
Rechner2  |  00-26-B3-F6-C0-5F    |   28.04.2009  |   
03.
Rechner2  |  00-14-48-51-04-11    |   12.10.2009  |  
Wobei sich die Anzahl der Zeile andert und die eingetragen Tag / (Datums) variieren

Und jetzt möchte ich per Batch herausfinden welcher Eintrag an einen andere vorgebene Datum zu dem Zeitpunkt am nächsten kommt.


Also wenn ich z.b. für File 1 das Datum 17.11.2009 angebe dann möchte ich das er mir sagt das der nächst älter Eintrag der 12.10.2009 ist.

Rechner1 | 00-14-38-51-03-11 | 12.10.2009 |

der Eintrag 03.12.2009 ist zwar der nähre aber das ist ja von einem neuer Rechner und bis dahin hatte der Rechner die MAC Adresse 00-17-A4-F6-C0-2F
also ist auch am 17.11.2009 die Netzwerkkarte mit der MAC Adresse 00-17-A4-F6-C0-2F im Rechner da die ja am 12.10.2009 in den Rechner kam.

Somit ist für das Datum 17.11.2009 und File 1 das richtige Ergebniss -> Rechner1 | 00-14-38-51-03-11 | 12.10.2009 |


Bei zwei Einträgen habe ich versucht die Einträge Jahr Monat und Tag herauszuziehen in Variblen zu schreiben und die mit Größer/Kleine Gleich zu Vergleichen.

Aber ich habe festgestellt es gibt Dateien mit mehr als zwei Einträgen.
Und spätestens da bin ich am ende meiner Weißheit.

Ich denke mir die Datei in einer Schleifen durchgehen und dann das Datum mit jeden Einzelen vergleichen.


Aber leider weiß ich nicht genau wie ich das in Batch technisch umsetzten soll.
Ich hoffe auf eure Unterstützung.

mycroftone
Mitglied: Biber
19.01.2011 um 18:54 Uhr
Moin mycroftone,

Zitat von mycroftone:
Was noch besser währ währe der nächste älter
...
... weil am 12.10.2009 kamm ein neuer Rechner und bis dahin ..

Bei zwei Einträgen habe ich versucht die Einträge Jahr Monat und Tag herauszuziehen in Variblen zu schreiben
und die mit Größer/Kleine Gleich zu Vergleichen.
...
Und spätestens da bin ich am ende meiner Weißheit.

Ich bitte dich allerinständigst, doch in deinem Beitrag - bei dem es sicherlich ganz schnell gehen musste weil der Hund raus wollte und der Bäcker gleich zumacht etc -

... die Anforderungsformulierung zu überarbeiten.


Im Groben verstehe ich die Zielrichtung (glaube ich) - aber ich hätte doch nach zwei Zeilen schon laut gerufen :
"Haben wir dafür nicht früher mal ein Multiplan oder Lotus 1-2-3 oder Excel 95 eingekauft und liegt das nicht noch in der Garage?"

WTF muss denn die "Ermittlung des nächsthöheren Folgedatums" mit Batch erfolgen -
... oder soll das irgendwo an den Rand eines bestehenden Prozesses geflanscht werden?

Grüße
Biber
Bitte warten ..
Mitglied: mycroftone
19.01.2011 um 19:39 Uhr
Hallo Biber

Ja du hast völlig recht wenn du sagst diese Anforderung ( frage nach Hilfe ) kann man besser mit einer Tabellenkalkulation lösen.
Aber wie du auch schon vermutet hast ist das nur ein Teilprozess.


Ich habe eine Riese Tabelle / ein riesige Logfile das auch die MAC Adressen von 50 Rechner der Letzen 4 Jahre beinhaltet.

Und die MAC Adresse der Rechner brauche ich jetzt in einer anderen Datei.

Deswegen habe ich eine Batch Datei geschreiben in der ich mit findstr den Rechner Name herausfilter und dann aus der Zeile die MAC Adresse. Dabei habe ich festgestellt das es Rechner gibt die Unterschiedlich MAC Adressen haben. Also der Rechner irgendenwann getauscht wurde nur der Rechnername blieb.

Und in der neuen Tabelle gibt es auch ein Datum.

Also habe ich jetzt mit Findstr neune Dateien angelegt für einen Rechner dann habe festgestellt das es manchmal 2 Zeile gibt. ( In der also der Rechnername blieb aber die MAC Adresse sich geändert hat ) Jetzt habe ich so ungefahr 200 Zeilen Code geschrieben um herauszufinden welche MAC Adresse zu dem Datum die richtge ist. War schon ganz Stolz das das funktioniert.

Aber beim weiter durchprüfen der Batchdatei habe ich festgestellt das es auch Rechnerdateien mit 3 oder 4 Einträgen gibt also der Rechnername drei oder 4 physisch ander Rechner hatte oder ander Netzwerkkarten.

Da ist mir eingefall das die Leute aus diesem Forum für Lösung bei dennen ich z.b 50 -60 Zeile Cod braucht einen 2-3 Zeiler daherbrachten.

Also es ist nur eine Frage ob hier jemand in Batch oder auch in gekapselten VBS script
zu dem Datum aus der LogDatei den Eintrag mit dem nächstälteren Dateum zu finden.


Also ich hoffe die Anforderung/ Bitte für Hilfe dieses Sachverhalt und das Umfeld sind ist jetzt klarer geworden.

mycroftone
Bitte warten ..
Mitglied: bastla
19.01.2011 um 21:17 Uhr
Hallo mycroftone!

Unter der Annahme, dass
Also wenn ich z.b. für File 1 das Datum 09.12.2009 angebe dann möchte ich das er mir sagt das der näheste Eintrag der 12.10.2209 ist.
nicht wirklich so gemeint war, sondern das Datum 03.12.2009 richtig und somit 12.10.2009 das eigentlich gesuchte vorhergehende Datum ist, könnte das wie folgt gehen:

Wenn Du für das Format
Rechner1  |  00-17-A4-F6-C0-3F    |   09.10.2008  | 
ohnehin selbst verantwortlich bist, dann modifiziere den Batch so, dass in der Datei
20081009 00-17-A4-F6-C0-3F Rechner1
steht - die Umwandlung des Datums ginge dazu etwa so:
set "DatumNeu=%Datum:~-4%%Datum:~-7,2%%Datum:~-10,2%"
- und das Ganze reduziert sich danach tatsächlich auf relativ wenige (und nur oberflächlich getestete) Zeilen (ich verteile nur der Übersicht wegen auf ein paar mehr davon):
01.
@echo off & setlocal 
02.
set "Datei=D:\File1.txt" 
03.
set "Stichtag=20091209" 
04.
 
05.
set "VorLetzter=" 
06.
set "Letzter=" 
07.
for /f "delims=" %%i in ('sort "%Datei%"') do if "%%i" lss "%Stichtag%" ( 
08.
    set "VorLetzter=!Letzter!" 
09.
    set "Letzter=%%i" 
10.
11.
 
12.
if defined VorLetzter echo Vorhergehende Daten: %VorLetzter% 
13.
if defined Letzter ( 
14.
    echo Letzte Daten:        %Letzter% 
15.
) else ( 
16.
echo Keine vor dem %Stichtag% liegenden Daten gefunden! 
17.
)
Wenn das Ergebnis Deinen Intentionen entspricht, sollten die Übergabe des Stichtages per Aufrufparameter bzw Formatierung der Ausgabe dann ja nicht mehr unter "Hexerei" fallen ...

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
19.01.2011 um 22:07 Uhr
Moin mycroftone,
dann möchte ich das er mir sagt das der näheste Eintrag der 12.10.2209 ist.
ist aber noch ne laaange Zeit bis dahin!

wenn diese Dateien Log-Files sind wird doch immer unten dran geschrieben, dass heisst der letzte Eintrag eines Rechner1 ist der Aktuellste Eintrag des Rechner1

demnach wäre nur eine Zeile Code nötig

01.
for %h in (20091209) do (@for /f "useback tokens=1-5 delims=|." %i in ("Logfile.txt") do @if %h leq %m%l%k (@set "LE-%i-A=%m/%l/%k - %j") else @if not defined LE-%i-B @set "LE-%i-B=%m/%l/%k - %j")&set LE-|Sort>NeuesLog.txt
wenn nichts im "neuesLog.txt" ankommt dann sehn wir weiter

Ps. Deine Schreibstil ist - naja...

[Edit]ich sollte mir abgewöhnen zwischendurch andere Sachen zu machen...[/Edit]

Gruß Phil
Bitte warten ..
Mitglied: mycroftone
19.01.2011 um 23:05 Uhr
Hallo Bastla

Danke für das Feedback mit dem Lösungsvorschlag.

Du und Biber hatten recht mein Text oben im ersten Beitrag war wirklich etwas Fehlerhaft bezüglich der verwendeten Datumsamgaben.
Aber jetzt habe ich er korriegiert.
Nur die Annahe das der Suchbegriff der 3.12.2009 Richtige ist stimmt nicht ich habe extra ein Datum gewählt das nicht auch in der Datei vorhanden ist sonder ein X-Beliebiges.
Aber der 12.10.2009 ist dann wie du richtig sagtest das gewünschte Ergebnis.

Also werde ich die Ausgabe nach File1 aus meiner eigentlichen Batchdatei
In einer kleine For /K Schleife Zeile für Zeile File1 mit
01.
set "DatumNeu=%Datum:~-4%%Datum:~-7,2%%Datum:~-10,2%"
Umwandeln und nach z.B. D:\File1-1.txt speichern

Dann deine Batchschnippsel als Unterroutine

01.
@echo off & setlocal 
02.
set "Datei=D:\File1-1.txt" 
03.
set "Stichtag=20091209" 
04.
 
05.
set "VorLetzter=" 
06.
set "Letzter=" 
07.
for /f "delims=" %%i in ('sort "%Datei%"') do if "%%i" lss "%Stichtag%" ( 
08.
    set "VorLetzter=!Letzter!" 
09.
    set "Letzter=%%i" 
10.
11.
 
12.
if defined VorLetzter echo Vorhergehende Daten: %VorLetzter% 
13.
if defined Letzter ( 
14.
    echo Letzte Daten:        %Letzter% 
15.
) else ( 
16.
echo Keine vor dem %Stichtag% liegenden Daten gefunden! 
17.
18.
 
Dann bekomme ich in meine Batchdatei der Wert %Stichtag% zurück

Und kann dann mit findstr "%Stichtag%" "file1" meine richtige MAC Adresse für den richtigen Zeitraum herausfiltern.


Vielen dank schon im vorraus.

Ich werde es so bald wie möglich live austest.

mycroft
Bitte warten ..
Mitglied: mycroftone
19.01.2011 um 23:09 Uhr
Hallo pieh-ejdsch

Nein davon das der unterste Eintrag auch der vom neuesten Datum ist kann ich leider nicht ausgehen.
Nur das in der Datei festgehalten Datum ist der alleinige Anhalt wie neu die Zeile ist.

mycroftone
Bitte warten ..
Mitglied: mycroftone
19.01.2011 um 23:16 Uhr
Hallo Biber

Du hattest recht ich habe den Beitrag recht kurz vor Feierabend geschreiben. Und jetzt erst in einem Ruhigen Moment zu Hause habe gesehen das ich falsche Werte für Datumsangaben verwendet habe. Anhand dere man schlecht die Aufgabenstellung erraten konnte.

Aber Bastel hat mir einen Lösungsweg angezeigt denn ich sobald ich wieder in der Arbeit bin ausprobieren werde.

( Also übermorgen Morgen hat mein Sohn seinen 2ten Geburtstag )
Bitte warten ..
Mitglied: bastla
19.01.2011 um 23:58 Uhr
Hallo mycroftone!
Nur die Annahe das der Suchbegriff der 3.12.2009 Richtige ist stimmt nicht ich habe extra ein Datum gewählt das nicht auch in der Datei vorhanden ist sonder ein X-Beliebiges.
Das war mir klar - nur war zunächst nach dem ersten davor liegenden Datum, und dann nach dem vorletzten gefragt - und das waren nun mal, ausgehend vom ursprünglichen 9.12., der 3.12. bzw 12.10.
Wenn Dir jetzt das jeweils letzte Datum vor dem Stichtag genügt, verkürzt sich der Batch sogar nochmals:
01.
@echo off & setlocal 
02.
set "Datei=D:\File1.txt" 
03.
set "Stichtag=20091117" 
04.
 
05.
set "Letzter=" 
06.
for /f "delims=" %%i in ('sort "%Datei%"') do if "%%i" lss "%Stichtag%" set "Letzter=%%i" 
07.
 
08.
if defined Letzter ( 
09.
    echo Letzte Daten: %Letzter% 
10.
) else ( 
11.
    echo Keine vor dem %Stichtag% liegenden Daten gefunden! 
12.
)
Dann bekomme ich in meine Batchdatei der Wert %Stichtag% zurück

Und kann dann mit findstr "%Stichtag%" "file1" meine richtige MAC Adresse für den richtigen Zeitraum herausfiltern.
Sollte ja gar nicht mehr nötig sein, wenn Du die "file1.txt" meinem Vorschlag entsprechend erstellst, da ja dann ohnehin die gesamte Zeile, also zB
20091012 00-14-38-51-03-11 Rechner1
in der Variablen %Letzter% steht und somit die MAC-Adresse zB mit
for /f "tokens=2" %%i in ("%Letzter%") do set "MAC=%%i"
(als Ersatz der oder ergänzend zur Zeile 9) ermittelt werden kann ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
20.01.2011 um 00:04 Uhr
@PH
... und ich hatte mir (auch als edukative Maßnahme) das Verabeiten der original formatierten Datei verkniffen ...

Grüße
bastla
Bitte warten ..
Mitglied: mycroftone
20.01.2011 um 00:14 Uhr
Hallo Bastel

Das ist das was ich meinte ich hatte jetzt umständlich für meinen 4 Zeilen irgendwie noch eine Schleife um meine 200 Zeile für das entscheiden für dien eine oder die andere Zeile gebastelt . Das hätte nochmal länger gedauert. Und je länger desto Fehleranfälliger.

Und meine ist ja im Kerne doch wieder nur ein Einzeiler. Also erstmal danke.
Bitte warten ..
Mitglied: Biber
29.01.2011 um 15:11 Uhr
Sach ma, mycroftone,

hat sich denn dein Sohn inzwischen von der wilden Party erholt, ist der Senf schon von der Decke gekratzt und neue Lampenschirme gekauft worden?

Und hast du jetzt wieder Luft für ein endgültiges Abhaken oder ein weiteres Vorantreiben dieses Beitrags?

Grüße
Biber
Bitte warten ..
Mitglied: mycroftone
29.01.2011 um 16:41 Uhr
Hallo Biber

Habe ich total vergessen. Sorry. Viel Luft für anderes hatte ich die Woche nicht.

Danke Bastel

Habe deine Zeilen wunderbar bei mir einbauen können.
Nur wenn das Datum niedriger ist als der Letze Eintrag der Liste dann habe ich noch ein paar Zeilen hinzugefügt
das er dann denn letzen nehmen soll.
Aber wie gesagt hier gibt es einfach ein paar Leute die ein Problem für das ich 200 Zeilen brauche
das ganze manchmal echt in ein / zwei Zeilen umsetzen können.

Also nochmal besten Dank die Problemstellung kann als gelöst betrachtet werden.

mycroftone
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows 10
gelöst Windows 10 - Datum und Zeitfehler bei Update (3)

Frage von swisstom zum Thema Windows 10 ...

Windows Userverwaltung
gelöst Datum einer Gruppenmitgliedschaft (1)

Frage von slansky zum Thema Windows Userverwaltung ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...