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-Key: 102545

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

Printed on: April 26, 2024 at 18:04 o'clock

Member: -Ohforf
-Ohforf Nov 24, 2008 at 15:11:27 (UTC)
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
Member: matt1967
matt1967 Nov 24, 2008 at 15:15:17 (UTC)
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
Member: -Ohforf
-Ohforf Nov 24, 2008 at 15:21:00 (UTC)
Goto Top
Das hört sich ja noch relativ leicht an face-smile

Was soll denn das endgültige Ausgabeformat sein?
Member: matt1967
matt1967 Nov 24, 2008 at 15:23:10 (UTC)
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
Member: paulepank
paulepank Nov 24, 2008 at 15:27:55 (UTC)
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
Member: matt1967
matt1967 Nov 24, 2008 at 15:42:15 (UTC)
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)
Member: -Ohforf
-Ohforf Nov 24, 2008 at 15:48:02 (UTC)
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
Member: paulepank
paulepank Nov 24, 2008 at 15:50:12 (UTC)
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
Member: matt1967
matt1967 Nov 24, 2008 at 15:50:50 (UTC)
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
Member: bastla
bastla Nov 24, 2008 at 15:53:00 (UTC)
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
Member: paulepank
paulepank Nov 24, 2008 at 15:53:10 (UTC)
Goto Top
gib ein Beispielsatz für > 0
Member: matt1967
matt1967 Nov 24, 2008 at 15:58:48 (UTC)
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
Member: paulepank
paulepank Nov 24, 2008 at 15:58:50 (UTC)
Goto Top
du wirst doch nicht etwa das gemeint haben ?
am Prompt:
findstr /c:"hitcnt>0" deine_log.txt > neue_log.txt  

cu paulepank
Member: matt1967
matt1967 Nov 24, 2008 at 16:02:49 (UTC)
Goto Top
auch net da erstellt er mir nur ein blank neue_log.txt
Member: bastla
bastla Nov 24, 2008 at 16:04:54 (UTC)
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
Member: matt1967
matt1967 Nov 24, 2008 at 16:07:02 (UTC)
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=
Member: bastla
bastla Nov 24, 2008 at 16:08:26 (UTC)
Goto Top
Und wie hat die Zeile vorher ausgesehen?
Member: matt1967
matt1967 Nov 24, 2008 at 16:10:13 (UTC)
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
Member: bastla
bastla Nov 24, 2008 at 16:12:29 (UTC)
Goto Top
... und bei Verwendung meines Vorschlags von 16:53:00 wurde diese Zeile so wie oben gezeigt ausgegeben (bei mir nämlich nicht)?
Member: matt1967
matt1967 Nov 24, 2008 at 16:19:54 (UTC)
Goto Top
wie sieht die Zeile dann bei Dir aus
Member: bastla
bastla Nov 24, 2008 at 16:24:50 (UTC)
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)
Member: paulepank
paulepank Nov 24, 2008 at 16:25:25 (UTC)
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 ?
Member: matt1967
matt1967 Nov 24, 2008 at 16:31:31 (UTC)
Goto Top
nein hast du denn gleich effekt sorry

@bastla geht nicht nur blank txt file
Member: bastla
bastla Nov 24, 2008 at 16:36:47 (UTC)
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)?
Member: -Ohforf
-Ohforf Nov 24, 2008 at 17:06:46 (UTC)
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
Member: bastla
bastla Nov 24, 2008 at 18:31:29 (UTC)
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
Member: paulepank
paulepank Nov 24, 2008 at 18:57:25 (UTC)
Goto Top
@bastla,

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

cu paulepank
Member: bastla
bastla Nov 24, 2008 at 19:07:49 (UTC)
Goto Top
@paulepank
Warst Du da nicht ein klein wenig voreilig? Vielleicht hätte auch matt1967 gerne ... face-wink

Grüße
bastla
Member: matt1967
matt1967 Nov 25, 2008 at 08:55:43 (UTC)
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
Member: bastla
bastla Nov 25, 2008 at 12:11:50 (UTC)
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
Member: aFankhauser
aFankhauser Dec 29, 2008 at 14:42:29 (UTC)
Goto Top
Member: aFankhauser
aFankhauser Jul 29, 2009 at 19:39:16 (UTC)
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
Member: bastla
bastla Jul 29, 2009 at 19:48:17 (UTC)
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
Member: Biber
Biber Jul 29, 2009 at 22:58:05 (UTC)
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
Member: matt1967
matt1967 Jul 30, 2009 at 04:05:03 (UTC)
Goto Top
@frankhauser
danke trotzdem!

Gruß
Matt1967
Member: bastla
bastla Jul 30, 2009 at 08:10:53 (UTC)
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