Wie analysieren Sie den text über mehrere Zeilen mit textfsm?

Habe ich verstanden, dass TextFSM ist ein guter Weg, um zu analysieren, text-Dateien, allerdings sehe ich, dass es analysieren können Daten über einzelne Zeilen, meine Frage ist, wie das Parsen von text verteilt über mehrere Zeilen.

    <Page>


CUSIP No. 123456                  13G                   Page 2 of 10 Pages
-----------------------------------------------------------------------------
     (1)    NAMES OF REPORTING PERSONS

            ABC Ltd.

-----------------------------------------------------------------------------
     (2)    CHECK THE APPROPRIATE BOX IF A MEMBER OF A GROUP
                                                               (a)  [ ]
                                                               (b)  [X]
--------------------------------------------------------------------------------
     (3)    SEC USE ONLY
--------------------------------------------------------------------------------
     (4)    CITIZENSHIP OR PLACE OF ORGANIZATION

            Bruny Islands
--------------------------------------------------------------------------------
NUMBER OF      (5)   SOLE VOTING POWER
                     0
SHARES         -----------------------------------------------------------------

BENEFICIALLY   (6)   SHARED VOTING POWER

1,025,824 shares of Common Stock


OWNED BY       --------------------------------------------------------------

EACH           (7)   SOLE DISPOSITIVE POWER
                     0
REPORTING      --------------------------------------------------------------

PERSON WITH:   (8)   SHARED DISPOSITIVE POWER

1,025,824 shares of Common Stock


-----------------------------------------------------------------------------
     (9)    AGGREGATE AMOUNT BENEFICIALLY OWNED BY EACH REPORTING PERSON

1,025,824 shares of Common Stock


-----------------------------------------------------------------------------
     (10)   CHECK BOX IF THE AGGREGATE AMOUNT
            IN ROW (9) EXCLUDES CERTAIN SHARES
                                                                          [ ]
-----------------------------------------------------------------------------
     (11)   PERCENT OF CLASS REPRESENTED
            BY AMOUNT IN ROW (9)
            4.15%
-----------------------------------------------------------------------------
     (12)   TYPE OF REPORTING PERSON
            CO
-----------------------------------------------------------------------------

in dem obigen text möchte ich analysieren, die Namen der reporting Personen und Staatsbürgerschaft oder Ort der Organisation, wie die ist nicht in einer einzigen Zeile. Was ist der beste Weg zur Lösung dieses Problems?

InformationsquelleAutor Trinadh Gupta | 2017-03-28



3 Replies
  1. 3

    Können Sie dies mit TextFSM state übergang.

    Diese Vorlage tut das, was Sie brauchen:

    Value REPORTING_PERSONS (\S+[\S ]+)
    Value CITIZENSHIP (\S+[\S ]+)
    
    Start
      ^.+NAMES OF REPORTING PERSONS -> Person
      ^.+CITIZENSHIP OR PLACE OF ORGANIZATION -> Citizenship
      ^ +NUMBER OF -> Record
    
    Person
      ^ +${REPORTING_PERSONS}
      ^-+ -> Start
    
    Citizenship
      ^ +${CITIZENSHIP}
      ^-+ -> Start
    

    Ergebnis:

    REPORTING_PERSONS    CITIZENSHIP
    -------------------  -------------
    ABC Ltd.             Bruny Islands
    

    Sehen Sie hier ein paar Beispiele:
    https://github.com/google/textfsm/wiki/Code-Lab

    • Froh, dass ich helfen konnte! 🙂
    • Was ist die Absicht, mit der „^ +zahlen -> Record “ in diesem Fall? Nicht es es nur beenden, indem es sich selbst als es nicht finden, keine anderen Spiele?
  2. 0
    Value REPORTING_PERSON (\S+[\S ]+)
    Value CITIZENSHIP (\S+[\S ]+)
    
    Start
      ^.+NAMES\s+OF\s+REPORTING\s+PERSONS -> Person
      ^.+CITIZENSHIP\s+OR\s+PLACE\s+OF\s+ORGANIZATION -> Citizenship
      ^ NUMBER OF -> Record
    
    Person
      ^(\s+)${REPORTING_PERSON} -> Start
    
    Citizenship
      ^\s+${CITIZENSHIP} -> Start
    
    • Sie können mit start in derselben Zeile.
  3. 0

    Hier ist ein Beispiel für eine lange und komplizierte Linie, die ich nicht wollen, um mit einem bestimmten regex für.

    LSBATCH: User input
    /hps/nobackup2/production/metagenomics/assembly-pipeline/prod/venv/bin/python /hps/nobackup2/production/metagenomics/...  -p DRP000303  -r DRR000714
    

    Stattdessen habe ich nur match die komplette Zeile, folgt eine Markierung der Zeile mit User input:

    # match entire line
    Value job_command (.*)
    
    Start
      # match line after line containing "User input"
      ^.*User input -> JobCommand
      # some more rules...
    
    JobCommand
      ^${job_command} -> Start
    

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.