Anzeige:
Ergebnis 1 bis 4 von 4

Thema: grep massaker nach python portieren

  1. #1
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.273

    grep massaker nach python portieren

    Ich versuche einen Bash einzeiler in Pyhton zu basteln und kam zu der ueberraschenden Erkenntniss, ist ja gar nicht so einfach

    Code:
    zgrep -h -o -E "[a-zA-Z0-9_\.]+\.[A-Z][a-zA-Z0-9_]+Exception" "LogFile" | sed 's/\\n//g' | sed 's/\\t//g' | sort | uniq -c | sort -k 1 -n -r
    Das ganze fummelt Exceptions aus einem Java Log und zaehlt die einzelnen Exceptions ohne nach eine spezifischen zu suchen

    Am Ende sieht das ungefaehr so aus (mit ein wenig mehr code)

    Code:
                                                                           java.util.concurrent.ExecutionException| (7)
                                                                                   javax.ws.rs.ProcessingException| (6)
                                                               com.fasterxml.jackson.databind.JsonMappingException| (6)
                                                                       javax.ejb.EJBTransactionRolledbackException| (5)
                                                    org.springframework.dao.IncorrectResultSizeDataAccessException| (3)
    Meine Frage ist, wie bekomme ich das hin, ohne dass mir der Speicher platzt, in Bash war das ja einfach
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  2. #2
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.826
    Zum einen kannst du an den Unix Pragma festhalten, nämlich Programm genau so zu verknüpfen, wie du das im Bash Skript gemacht hast.
    Mit Python würde ich es etwa so lösen:
    Code:
    import re
    
    logContent = '''bla\njava.util.concurrent.ExecutionException\n
        bla\nbla\nbla org.springframework.dao.IncorrectResultSizeDataAccessException bla\n 
        java.util.concurrent.ExecutionException\njava.util.concurrent.ExecutionException\n'''
    dict = {}
    pattern = re.compile('(\w+\.)+\w+Exception')
    
    for match in pattern.finditer(logContent):
        key = match.group(0)
        if key not in dict:
            dict[key] = 1
        else:
            dict[key] = dict[key] + 1
        
    for key, val in dict.items():
        print(f'{key}: {val}')
    Geändert von nopes (11.05.23 um 15:47 Uhr) Grund: Regex-Pattern vereinfacht
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  3. #3
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.273
    Ich habe das in Iphyton ausprobiert, der match beinhaltet nur einen abgeschnittenen Teil der Exception, das selbe auch wenn ich mit der alten regexp rumspiele, sollte also was mit dem match object sein
    Code:
    ttt = "full logline with string com.oneandone.termination.clearance.exceptions.ClearanceFailedException and more"
    
    pattern = re.compile('(\w+\.)+\w+Exception''(.*)')
    for match in pattern.finditer(ttt):
        print(match)
    
    <re.Match object; span=(25, 105), match='com.oneandone.termination.clearance.exceptions.Cl>
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  4. #4
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.826
    Ich denke da passt schon alles, die print-Anweinsung stellt match eher schlecht da, greif auf die Gruppen zu
    Code:
    import re
    
    ttt = "full logline with string com.oneandone.termination.clearance.exceptions.ClearanceFailedException and more"
    
    pattern = re.compile('((\w+\.)+\w+Exception)(.*)')
    for match in pattern.finditer(ttt):
        print(match.group(0))
        print(match.group(1))
        print(match.group(2))
        print(match.group(3))
    Ausgabe:
    Code:
    com.oneandone.termination.clearance.exceptions.ClearanceFailedException and more
    com.oneandone.termination.clearance.exceptions.ClearanceFailedException
    exceptions.
     and more
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

Ähnliche Themen

  1. python script nach außen sichern
    Von croeh im Forum Linux als Server
    Antworten: 2
    Letzter Beitrag: 19.06.15, 22:02
  2. Antworten: 91
    Letzter Beitrag: 21.08.07, 18:13
  3. SUCHE: fuse python bindings für python 2.4 und Suse 10
    Von skurial im Forum System installieren und konfigurieren
    Antworten: 4
    Letzter Beitrag: 20.11.05, 16:21
  4. licq history nach sim portieren
    Von thierry im Forum Anwendungen Allgemein, Software
    Antworten: 0
    Letzter Beitrag: 09.04.03, 17:03
  5. *.lyx bzw. *.sgml nach *.html portieren...
    Von Tosk im Forum Linux Allgemein
    Antworten: 4
    Letzter Beitrag: 04.01.00, 07:30

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •