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

Textdateien inhaltlich vergleichen

Frage Entwicklung Batch & Shell

Mitglied: ghoyer

ghoyer (Level 1) - Jetzt verbinden

12.03.2009, aktualisiert 09:12 Uhr, 2514 Aufrufe, 2 Kommentare

Tach zusammen,

Folgendes Problem:
Ich habe zwei Dateien eines Rechenlaufes, von welchen eine die Werte aller Rechenzeitschritte enthält, die andere nur die Maximalwerte. Die Dateien sehen dabei wie folgt aus:

Die Datei mit den Einzelwerten (WSPL.dat):
01.
SCALAR 
02.
ND  21516 
03.
ST  0 
04.
TS        10.00 
05.
    0.0000 
06.
    0.0000 
07.
    0.0000 
08.
    0.0000 
09.
    0.0000 
10.
    0.0000 
11.
... 
12.
SCALAR 
13.
ND  21516 
14.
ST  0 
15.
TS     14400.41 
16.
    0.0000 
17.
  115.8919 
18.
  115.8919 
19.
  115.8900 
20.
  115.8861 
21.
  115.8864 
22.
... 
23.
SCALAR 
24.
ND  21516 
25.
ST  0 
26.
TS     28800.33 
27.
    0.0000 
28.
  116.2450 
29.
  116.2450 
30.
  116.2397 
31.
  116.2361 
32.
  116.2369 
33.
... 
34.
usw.
"ND" steht dabei für die Anzahl der Rechennetzknoten (Nodes) und damit die Anzahl der Zeilen je Zeitschritt,
"TS" für den aktuellen Zeitschritt (Time Step) in Sekunden. Die Nachkommastellen bei der Zeit sind für mich uninteressant.
Ein "End-Tag" je Zeitschritt ist nicht vorhanden.

Die Datei mit den Maximalwerten (WSPL_max.dat):
01.
SCALAR 
02.
ND  21516 
03.
ST  0 
04.
TS     43200.19 
05.
    0.0000 
06.
  116.4927 
07.
  116.4927 
08.
  116.4711 
09.
  116.4741 
10.
  116.4742 
11.
...
Hier ist "TS" der letzte gerechnete Zeitschritt.

Ich möchte nun eine Datei, in der der Zeitschritt steht, in dem das Maximum erreicht wird. z.B. so (Diese ist jetzt nur gebastelt!):
01.
SCALAR 
02.
ND  21516 
03.
ST  0 
04.
TS     43200.19 
05.
    0.0000 
06.
  3600 
07.
  7200 
08.
  14400 
09.
  28800 
10.
  7200 
11.
...

Zum Thema Robustheit / Datenvolumen:
Die vorherigen Daten stammen aus einem überschaubaren Rechennetz. Die Anzahl der Knoten (ND) liegt z.Z. um die 1,2 Mio. bei 50 Zeitschritten und mehr. Das macht ca 13 MB für die WSPL_max.dat und z.B. 640 MB für die WLSP.dat. Für diese Groß-Projekte darf die Aufbereitung auch ein paar Stündchen dauern.

Meine Idee wäre, die WSPL.dat in einzelne Datei-"Scheibchen" je Zeitschritt zu teilen (z.B. per FOR-Schleife) und dann z.B. per FC die Scheibchen mit der Maximaldatei zu vergleichen. Irgendwo hatte ich hier im Forum auch schon ein VB-Script für Berechnungen mit Nachkommastelle gefunden.

Bevor ich jetzt drauf los klimpere und einen Haufen Zeit wegen unausgereifter Batch- / VB-Kenntnisse vertrödle, wollte ich Euch um Kommentierung bzw. Alternativvorschläge bitten.

Danke, Gisi
Mitglied: Biber
13.03.2009 um 18:56 Uhr
Moin ghoyer,

ich würde eine etwas Strategie vorschlagen...
Dein Lösungsansatz würde ja auch zum Ziel führen, hat aber irgendwie den immer deprimierend wirkenden Anstrich von stundenlangem stupiden Sandschaufeln.
So was schlägt mir immer aufs Gemüt.

Wenn ich die Anforderung richtig verstanden habe, dann willst Du doch nur den Max-Wert der Zeilen "TS nnnnn.mm" ermitteln und genau diesen vollständigen Block rausziehen.

Also wäre meine Idee
  • den Max-Wert (neudeutsch maxvalue, im folgenden als Variable %mv% auftauchend) der "TimeStep"-Zeilen ermitteln
  • von dieser Zeile mit dem maxWert merken wir uns die Zeilen-Nummer (nenn ich mal %mvl% wie maxValueLine.
  • und holen uns aus dem ganzen Riesen-Textgeraffel der wspl.dat diese Zeile+ein paar Zeilen plusminus aus.

Schritt 1 & 2 lassen sich mit einer CMD-Promptzeile abfackeln, wie ich an einer um 2 Blöcke erweiterten wspl.dat demonstrieren möchte:
01.
SCALAR 
02.
ND  21516 
03.
ST  0 
04.
TS        10.00 
05.
    0.0000 
06.
    0.0000 
07.
    0.0000 
08.
    0.0000 
09.
    0.0000 
10.
    0.0000 
11.
... 
12.
SCALAR 
13.
ND  21516 
14.
ST  0 
15.
TS     14400.41 
16.
    0.0000 
17.
  115.8919 
18.
  115.8919 
19.
  115.8900 
20.
  115.8861 
21.
  115.8864 
22.
... 
23.
SCALAR 
24.
ND  21516 
25.
ST  0 
26.
TS     28800.33 
27.
    0.0000 
28.
  116.2450 
29.
  116.2450 
30.
  116.2397 
31.
  116.2361 
32.
  116.2369 
33.
SCALAR 
34.
ND  12345 
35.
ST  0 
36.
TS        10.00 
37.
    0.0000 
38.
    0.0000 
39.
    0.0000 
40.
    0.0000 
41.
    0.0000 
42.
    0.0000 
43.
... 
44.
SCALAR 
45.
ND  23456 
46.
ST  0 
47.
TS     14400.41 
48.
    0.0000 
49.
  115.8919 
50.
  115.8919 
51.
  115.8900 
52.
  115.8861 
53.
  115.8864
Darauf schiesse ich diese Zeile ab vom CMD-Prompt:
[ohne ">".... das ">" ist mein Prompt-Zeichen.... NICHT mit eingeben!]
01.
>set "mv=0" & for /f "tokens=1-3 delims=:. " %i in ('findstr /n "^TS" wspl.dat') do @if %k GTR !mv! @(set "mv=%k" && set "ml=%i" & @echo mv=%k; !ml!)
... und erhalte (as should do) folgende Ausgabe:
01.
mv=10; 4 
02.
mv=14400; 15 
03.
mv=28800; 26
---> d.h. mit dieser einen Zeile habe ich den TS-maxWert 28000 ermittelt und weiss, dass der in Zeile 26 Steht

Wenn ich dann noch "weiss", dass zwei Zeilen davor der NodeName steht und in den 5 Zeilen danach die Detailwerte, dann kann ich diese Zeilen gezielt herausfieseln.
01.
>findstr /n $ wspl.dat|findstr "^24: ^26: ^27: ^28: ^29: ^30: ^31: ^32" 
02.
24:ND  21516 
03.
26:TS     28800.33 
04.
27:    0.0000 
05.
28:  116.2450 
06.
29:  116.2450 
07.
30:  116.2397 
08.
31:  116.2361 
09.
32:  116.2369
Nun muss ich nur noch die Zeilen-Nummern wieder entsorgen:
01.
>for /f "delims=: tokens=2" %i in ('findstr /n $ wspl.dat^|findstr "^24: ^26: ^27: ^28: ^29: ^30: ^31: ^32"') do @echo %i 
02.
ND  21516 
03.
TS     28800.33 
04.
    0.0000 
05.
  116.2450 
06.
  116.2450 
07.
  116.2397 
08.
  116.2361 
09.
  116.2369
Dann habe ich den Block, den Du wolltest.

Oder habe ich es falsch verstanden?

Grüße
Biber
Bitte warten ..
Mitglied: ghoyer
15.03.2009 um 16:30 Uhr
Hallo, Batch-Großmeister,

Ich sehe, ich muss meine Ausdrucksweise verbessern.

Hatte ich schon erwähnt, das "ND" die ANZAHL der Knoten ist? Diese ist immer gleich.
Die TS-Werte sind von einer "Scheibe" zur nächsten aufsteigend (z.B. wird aller 2 h = 7200 s ein Daten-"Scheibchen" ausgeschrieben, d.h. an die WSPL.dat angehängt.).
Ansonsten sind die Kopfzeilen mehr oder weniger Schall und Rauch.

Die individuelle Knotennummer ist nicht in der Datei enthalten, die Zeilennummer in jedem Daten-"Scheibchen" entspricht hier der Knotennummer (abzüglich der paar Kopfzeilen)

Ich möchte im Ergebnis also einen einfaches Daten-"Scheibchen", in dem für jeden einzelnen Knoten steht, in welchem Zeitschitt (also WANN, der TS-Wert am Beginn jedes "Scheibchens") an diesem das für jeden Knoten individuelle Maximum erreicht wird. Das ist aufgrund von Wellenausbreitungen durchaus in unterschiedlichen Zeitschritten möglich.
Der individuelle Maximalwert steht ja schon in der WSPL_max.dat.

Ich hoffe, ich konnte alle Klarheiten beseitigen

Danke, Gisi
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Textdateien vergleichen BATCH
gelöst Frage von FeudelFredBatch & Shell2 Kommentare

Moin Moin, ich bin komplett neu im Forum und habe auch keine sonderlich großen Erfahrungen mit Foren. Habe eine ...

Batch & Shell
Zahlen aus Textdatei in Batch vergleichen
gelöst Frage von yspke24Batch & Shell7 Kommentare

Hi, ich habe schon stundenlang im Internet gesucht, konnte aber nichts Passendes finden. Ich habe eine Textdatei "time.log". In ...

Ubuntu
Wie kann man 2 Textdateien vergleichen (OHNE SORTIERUNG!) und die gleiche Zeilen in einer Datei lassen und den Rest löschen?
gelöst Frage von takitanoUbuntu11 Kommentare

Ich habe 2 Textdateien mit deutschen Wörtern. Erste Datei ist nach Häufigket von Wörtern sortiert (frequency list) und zweite ...

Batch & Shell
Batch: Erste Stellen von zwei aufeinander folgenden Zeilen derselben Textdatei vergleichen
gelöst Frage von ole-objektBatch & Shell5 Kommentare

Hallo mal wieder, meine derzeitige Arbeit erfordert leider viele Vergleiche von verschiedenen Dateien und nun also auch innerhalb derselben ...

Neue Wissensbeiträge
Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 5 StundenLinux12 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 TagHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 2 TagenMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Heiß diskutierte Inhalte
Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux12 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Windows 10
Alle Programme mit bestimmtem Namen automatisch (per GPO) deinstallieren
gelöst Frage von lordofremixesWindows 1012 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, alle Programme beginnend mit z.B. "Dell" im Namen per Script und somit per ...