matt1967
Goto Top

wert aus txt file auslesen

hallo zusammen wäre super wenn einer von Euch ne Idee hätte

Ich habe ein txt. file mit circa 17000 Einträgen aus netzwerk access listen. die einträge sehen wie folgt aus:

access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=0)

nun kommt das erste Problem die Einträge können unetrschiedlich lang sein das bedeutet groß mit Excel Text in Spalten und filter is nicht face-sad
Ich bräucht aus jeder Zeile den Wert hitcnt wo der Wert > 0 ist

wie kann ich das am besten abfangen

Gruß
Matthias

Content-ID: 102545

Url: https://administrator.de/contentid/102545

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

-Ohforf
-Ohforf 24.11.2008 um 16:11:27 Uhr
Goto Top
Hallo matt,

Was verstehst du unter "unterschiedlich lang"?

Und welchen Wert benötigst du aus den entsprechenden Zeilen?
Alles oder nur einen bestimmten Teil?

Ich arbeite da gerade an etwas vergleichbaren,
Logdateien zwecks einpflegen in eine Datenbank normalisieren.

Leider ist VB nicht gerade mein Gebiet...

Gruß,
Niklas
matt1967
matt1967 24.11.2008 um 16:15:17 Uhr
Goto Top
HI Niklas,

vielen Dank für die schnelle Antwort. Ich benötige jede Zeile aus dem File wo der (hitcnt=0)
> 0 ist.

Mit unterschiedlich lange meine ich die Zeilelänge in einem Eintrag stehen zumn Beispiel mehrere IP Adressen drin. Damit bist in Excel nicht in der Lage den Text in Spalten zu unterteilen. Weil einmal würde der Eintrag dann in der 5 Spalte stehen und beim nächsten mal in der 6

VB ist nicht zwingend solange ich ne Lösung finden face-smile

Gruß
Matthias
-Ohforf
-Ohforf 24.11.2008 um 16:21:00 Uhr
Goto Top
Das hört sich ja noch relativ leicht an face-smile

Was soll denn das endgültige Ausgabeformat sein?
matt1967
matt1967 24.11.2008 um 16:23:10 Uhr
Goto Top
mach mich net fertig ich zerbreche mir meine grauen Zellen,
txt file würde genügen ansonsten überlasse ich es dir hauptsache ich kann es öffnen
face-smile

Gruß
Matthias
paulepank
paulepank 24.11.2008 um 16:27:55 Uhr
Goto Top
Hallo Matthias,

Ich bräucht aus jeder Zeile den Wert hitcnt wo der Wert > 0 ist

du meinst sicherlich:
Ich bräucht jede Zeile, in der der Wert > 0 ist

wenn ja hilft:

findstr /v /c:"0)" dein_log.txt > neuer_log.txt  

cu paulepank
matt1967
matt1967 24.11.2008 um 16:42:15 Uhr
Goto Top
hi vielen Dank
aber das funktioniert nicht richtig, teilweise schreibt es die richtigen Zeilen raus , teilweise aber auch die mit einer 0 und teilweise werde strings gelöscht aus hitcnt = 0 wird dann hitcnt

hier mal ein beispiel wie ein eintrag aufgebaut ist

access-list NoNAT-inside line 4 extended permit ip 10.100.194.0 255.255.255.0 172.16.21.0 255.255.255.0 (hitcnt=0)
-Ohforf
-Ohforf 24.11.2008 um 16:48:02 Uhr
Goto Top
Zitat von @paulepank:
findstr /v /c:"0)" dein_log.txt >  
> neuer_log.txt


Das würde bewirken, das jede Zeile aus deiner Logdatei
die nicht 0) enthält in eine neue Datei geschrieben
wird.

Wenn in deiner Logdatei Zeilen existieren die kein (hitcnt=0) enthalten,
würden diese ebenfalls übernommen.

Wenn das okay ist, wäre meine Lösung "overkill" ;)

Gruß,
Niklas
paulepank
paulepank 24.11.2008 um 16:50:12 Uhr
Goto Top
kann nicht sein,

mit diesen Testdaten:
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=0)
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=1) 
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=2) 
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=0) 
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=123) 
und o.g. Code am Prompt wird das angezeigt (bzw in neue Datei geschrieben):

access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=1) 
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=2) 
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=123) 

cu paulepank
matt1967
matt1967 24.11.2008 um 16:50:50 Uhr
Goto Top
das Problem ist das ich expilizit nach diesem String suchen

hitcnt = 0 oder > 0

wenn ich nur nach 0 suchen das kannst du vergessen da in jeder IP Adresse eine 0 vorkommen kann
bastla
bastla 24.11.2008 um 16:53:00 Uhr
Goto Top
@-Ohforf
Wenn in deiner Logdatei Zeilen existieren die kein (hitcnt=0) enthalten, würden diese ebenfalls übernommen.
Dann eben:
findstr "(hitcnt=" dein_log.txt|findstr /v "(hitcnt=0)" > neuer_log.txt
Grüße
bastla
paulepank
paulepank 24.11.2008 um 16:53:10 Uhr
Goto Top
gib ein Beispielsatz für > 0
matt1967
matt1967 24.11.2008 um 16:58:48 Uhr
Goto Top
das ist ein Auszug aus dem Ergebnis. daselbe wie vorher oben beschrieben

access-list insideACL line 2 extended permit icmp any 172.16.20.0 255.255.255.0 echo (hitcnt=185)
access-list insideACL line 2 extended permit icmp any 10.100.147.160 255.255.255.224 echo (hitcnt=115)
access-list insideACL line 2 extended permit icmp any 194.173.20.128 255.255.255.240 echo (hitcnt=812)
access-list insideACL line 2 extended permit icmp any 194.173.20.128 255.255.255.240 unreachable (hitcnt=3)
access-list insideACL line 6 extended permit udp host 10.100.194.70 host 194.173.20.132 eq snmp (hitcnt=1)
access-list insideACL line 6 extended permit udp host 10.100.194.70 host 194.173.20.133 eq snmp (hitcnt=2)
access-list insideACL line 6 extended permit udp host 10.100.192.134 host 194.173.20.132 eq snmp (hitcnt=263)
access-list insideACL line 6 extended permit udp host 10.100.192.134 host 194.173.20.133 eq snmp (hitcnt=224)
access-list insideACL line 6 extended permit udp host hp-tacacs2 host 194.173.20.132 eq snmp (hitcnt=1)
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 10.100.147.160 255.255.255.224 range 5988 5989 (hitcnt=
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.128 255.255.255.240 range 5988 5989 (hitcnt=
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.144 255.255.255.240 range 5988 5989 (hitcnt=
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.160 255.255.255.240 range 5988 5989 (hitcnt=
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.176 255.255.255.240 range 5988 5989 (hitcnt=
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.192 255.255.255.224 range 5988 5989 (hitcnt=
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.32 255.255.255.240 range 5988 5989 (hitcnt=0
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.32 255.255.255.240 range 10000 10200 (hitcnt
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.32 255.255.255.240 range 11000 11100 (hitcnt
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.224 255.255.255.224 range 5988 5989 (hitcnt=
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.96 255.255.255.224 range 5988 5989 (hitcnt=0
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.96 255.255.255.224 range 10000 10200 (hitcnt
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.96 255.255.255.224 range 11000 11100 (hitcnt
paulepank
paulepank 24.11.2008 um 16:58:50 Uhr
Goto Top
du wirst doch nicht etwa das gemeint haben ?
am Prompt:
findstr /c:"hitcnt>0" deine_log.txt > neue_log.txt  

cu paulepank
matt1967
matt1967 24.11.2008 um 17:02:49 Uhr
Goto Top
auch net da erstellt er mir nur ein blank neue_log.txt
bastla
bastla 24.11.2008 um 17:04:54 Uhr
Goto Top
@matt1967
Da "findstr" nur Zeilen filtert, kann dadurch eigentlich nichts (im Sinne von einzelnen Zeichen) "abgeschnitten" werden - poste doch bitte ein paar von den betroffenen Zeilen ...

Grüße
bastla
matt1967
matt1967 24.11.2008 um 17:07:02 Uhr
Goto Top
steht doch weiter oben drin

access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 10.100.147.160 255.255.255.224 range 5988 5989 (hitcnt=
bastla
bastla 24.11.2008 um 17:08:26 Uhr
Goto Top
Und wie hat die Zeile vorher ausgesehen?
matt1967
matt1967 24.11.2008 um 17:10:13 Uhr
Goto Top
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 10.100.147.160 255.255.255.224 range 5988 5989 (hitcnt=0)

und ich brauche die Zeilen wobei hitcnt= keine 0 steht
bastla
bastla 24.11.2008 um 17:12:29 Uhr
Goto Top
... und bei Verwendung meines Vorschlags von 16:53:00 wurde diese Zeile so wie oben gezeigt ausgegeben (bei mir nämlich nicht)?
matt1967
matt1967 24.11.2008 um 17:19:54 Uhr
Goto Top
wie sieht die Zeile dann bei Dir aus
bastla
bastla 24.11.2008 um 17:24:50 Uhr
Goto Top
na gar nicht - sollte ja auch nicht ausgegeben werden (wegen "(hitcnt=0)") ...
Inzwischen hätte ich noch eine andere Fassung des "findstr" anzubieten:
findstr "(hitcnt=[^0][0-9]*)" deine_log.txt > neue_log.txt
(ist etwas kürzer face-wink)
paulepank
paulepank 24.11.2008 um 17:25:25 Uhr
Goto Top
das ist doch alles Quatsch mit Soße.
Wie schon erwähnt, schneidet findstr nichts ab.

ich vermute du hast keinen reinen ASCII-text oder du machst noch was anderes.

type dein_log.txt|findstr /v /c:"0)"  
bringt was ?
matt1967
matt1967 24.11.2008 um 17:31:31 Uhr
Goto Top
nein hast du denn gleich effekt sorry

@bastla geht nicht nur blank txt file
bastla
bastla 24.11.2008 um 17:36:47 Uhr
Goto Top
Dann kann es eigentlich, wie von paulepank schon angeführt, nur daran liegen, dass sich in der Zeile Sonderzeichen befinden - kannst Du das überprüfen (zB mit einem Hex-Editor)?
-Ohforf
-Ohforf 24.11.2008 um 18:06:46 Uhr
Goto Top
Ich habe da so einen Verdacht...

Wenn ich richtig liege, handelt es sich um Logdateien
von einer Cisco Pix Appliance...

Und wenn ich mich recht entsinne liegt der Pix eine
Linux Distribution zu Grunde, dh. ihr habt ein anderes
Zeilenumbruchszeichen (LF vs. CR-LF).

Wenn ich nicht richtig liege, ignoriert das und
erschießt mich ;P

Gruß,
Niklas
bastla
bastla 24.11.2008 um 19:31:29 Uhr
Goto Top
@-Ohforf
Auch wenn die Zeilen nur durch LF getrennt wären, sollten beide angebotenen Versionen funktionieren (das tun sie jedenfalls bei meinen Tests) ...

Grüße
bastla
paulepank
paulepank 24.11.2008 um 19:57:25 Uhr
Goto Top
@bastla,

das kann Ohforf leider nicht mehr lesen, da ich ihn gg. halb 7 erschossen habe face-smile

cu paulepank
bastla
bastla 24.11.2008 um 20:07:49 Uhr
Goto Top
@paulepank
Warst Du da nicht ein klein wenig voreilig? Vielleicht hätte auch matt1967 gerne ... face-wink

Grüße
bastla
matt1967
matt1967 25.11.2008 um 09:55:43 Uhr
Goto Top
Hallo zusammen,
sorry musste gestern weg.

zu Niklas da liegst du richtig das ist ein log von einer pix.
@bastla fakt ist bei werden Zeilen verschluckt so wie ich es oben schon geschrieben habe. das geschieht aber nur bei den Zeilen die in der log eh schon länger sind als die andern. ich denke der vorschlag von Niklas ist nicht so abwegig insofern ich das als Laie beurteilen kann.

Nur wie bekommen ich das jetzt hin so das es funktioniert face-sad
bastla
bastla 25.11.2008 um 13:11:50 Uhr
Goto Top
Hallo matt1967!

Wie schon oben erwähnt, habe ich mit einigen Deiner Beispielzeilen eine Testdatei erstellt und nur LF für Zeilenumbrüche verwendet:
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=0)
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=1)
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=2)
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 10.100.147.160 255.255.255.224 range 5988 5989 (hitcnt=0)
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=0)
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 10.100.147.160 255.255.255.224 range 5990 5991 (hitcnt=4)
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.32 255.255.255.240 range 10000 10200 (hitcnt=1)
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.32 255.255.255.240 range 11000 11100 (hitcnt=0)
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=123)
Mit der Befehlszeile
findstr "(hitcnt=[^0][0-9]*)" deine_log.txt>neue_log.txt
erhalte ich folgenden Inhalt der "neue_log.txt":
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=1)
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=2)
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 10.100.147.160 255.255.255.224 range 5990 5991 (hitcnt=4)
access-list insideACL line 20 extended permit tcp 10.100.130.0 255.255.255.0 194.173.20.32 255.255.255.240 range 10000 10200 (hitcnt=1)
access-list NoNAT-inside line 2 extended permit ip 10.100.96.0 255.255.255.128 172.16.21.0 255.255.255.0 (hitcnt=123)
Die Zeilen in "neue_log.txt" sind ebenfalls nur durch LF getrennt.

Du kannst mir aber gerne ein Stück Deiner Logdatei mailen (meine Adresse hast Du per PN) ...

Grüße
bastla
aFankhauser
aFankhauser 29.12.2008 um 15:42:29 Uhr
Goto Top
aFankhauser
aFankhauser 29.07.2009 um 21:39:16 Uhr
Goto Top
Fix und fertig!
Falls dein System VBScript ausführt, sollte es so klappen (bei mir tut es dies zumindest)

Kopiere den Quelltext in eine neue Textdatei und speichere diese mit der Dateiendung .vbs .
Zeile 7 und 8 musst du noch anpassen.

'**********************************************************  
'author = aFankhauser (www.hiddenAlpha.ch)  
'version = 1.0.1  
'built = 29.07.2009  
'**********************************************************  
'Einstellungen  
vD1 = "Quelle.txt" 'Pfad der Quelldatei  
vD2 = "Ziel.txt" 'Pfad der Zieldatei  

const titel="Line sorter"  
if MsgBox("Script ausführen?",4,titel)<>6 Then rEnde "abbr"  
set oFso=CreateObject("scripting.FileSystemObject")  
set oShell=CreateObject("wscript.shell")  
if oFso.fileexists(vD1)=False Then
 MsgBox "Quelldatei kann nicht gefunden werden.",48,titel  
 rEnde ""  
End If
if oFso.fileexists(vD2)=True Then
 if MsgBox("Die Datei" & vbCrlf & vbCrlf & vD2 & vbCrlf & vbCrlf & "Existiert bereits." & vbCrlf & "Datei ersetzen?",32+4,titel)<>vbYes Then rEnde "abbr"  
End If
set oD1 = oFso.opentextfile(vD1,1,1)
set oD2 = oFso.opentextfile(vD2,2,1)
Do Until oD1.atEndOfStream
 vA1 = oD1.readline
 'Filtert die Zahl heraus  
 aA2 = Split(vA1,"(")  
 aA3 = Split(aA2(1),"=")  
 aA4 = Split(aA3(1),")")  
 vA2 = aA4(0)
 if vA2>0 Then
  oD2.write vA1 & vbLf
 End If
Loop
oD1.close
oD2.close
set oD1 = Nothing
set oD2 = Nothing
rEnde "fertig"  

'--------------------------------------------------Routinen--------------------------------------------------  
Sub rEnde(art)
 Select Case art
  Case "abbr"  
   MsgBox "Forgang wurde abgebrochen",,titel  
  case "fertig"  
   MsgBox "Filterung abgeschlossen.",64,titel  
 End Select
 wscript.quit
End Sub
bastla
bastla 29.07.2009 um 21:48:17 Uhr
Goto Top
@aFankhauser

Soll das ein verfrühtes Weihnachtsgeschenk für matt1967 sein (im Vorjahr ging sich's ja leider nicht mehr ganz aus)? face-wink

Grüße
bastla
Biber
Biber 30.07.2009 um 00:58:05 Uhr
Goto Top
@aFankhauser

... oder, um aus dem Regelwerk des Bremer Alpenvereins zu zitieren:
"Keine Mund-zu-Mundbeatmung bei Verunglückten, die schon länder als sechs Monate liegen"

Grüße
Biber
matt1967
matt1967 30.07.2009 um 06:05:03 Uhr
Goto Top
@frankhauser
danke trotzdem!

Gruß
Matt1967
bastla
bastla 30.07.2009 um 10:10:53 Uhr
Goto Top
@Biber
"Keine Mund-zu-Mundbeatmung bei Verunglückten, die schon länger als sechs Monate liegen"
Ist ja in der Veterinärmedizin ähnlich (dort allerdings hinsichtlich der "Mund-zu-Hundbeatmung" face-wink) ...

Grüße
bastla