2017-11-21 4 views
0

Ich muss Warnungen aus meinem Skript-Protokoll und fügen Sie eine "LAST" zu jeder Zeile nach jedem Start, so dass ich weiß, wenn die Warnung auf einen Blick auftritt, so füge ich dies zu meinem Skript: Dies ist die Faust Linie meiner Skript:Bash-Log-Datei zählen Wörter und ersetzen sie durch Nummer

echo "$(cat $ALERT_LOG_FILE | grep WARNING | tail -n 2k | ts "LAST ")" > $ALERT_LOG_FILE 

Script Protokoll wie dies auf den ersten Lauf aussieht: WARNING : ... WARNING : ... WARNING : ... WARNING : ...

Wenn Skript Start/Neustart des Echolinie fügt hinzu: „LAST“ zu jeder Zeile und mache es so: LAST WARNING : ... LAST WARNING : ... LAST WARNING : ... LAST WARNING : ...

Problem wird, wird die Protokolldatei wie dies nach einigen Neustarts: LAST 4 WARNING : .... LAST 3 WARNING : .... LAST 2 WARNING : .... LAST 2 WARNING : .... LAST 2 WARNING : .... LAST 1 WARNING : .... WARNING:

EDIT:

Code mit @Yoda Vorschlag:

LAST LAST LAST LAST WARNING : .... LAST LAST LAST WARNING : .... LAST LAST WARNING : .... LAST LAST WARNING : .... LAST WARNING : .... WARNING:

Jede Art und Weise es so zu machen,

cat $LOG_FILE | grep WARNING | tail -n 2k | ts "LAST " | awk '{n=gsub("LAST ",X);if(n) print "LAST",n,$0;else print}')" > $LOG_FILE 

out Protokoll nach einigen Neustarts mit @Yoda Vorschlag: LAST 2 2 1 WARNING : ... LAST 2 1 WARNING : ... LAST 1 WARNING : ... WARNING : ...

+0

Was ist der 'ts' Befehl? – janos

+0

Ich glaube, der Befehl, den du suchst, ist "wc". – R4F6

+0

ts fügt die "LETZTES" hinzu, um jede Zeile zu beginnen – papampi

Antwort

0

Basierend auf einigen Annahmen: -

$ awk '{n=gsub("LAST ",X);if(n) print "LAST",n,$0;else print}' file 
LAST 4 WARNING : .... 
LAST 3 WARNING : .... 
LAST 2 WARNING : .... 
LAST 2 WARNING : .... 
LAST 1 WARNING : .... 
WARNING: 

Wenn dies nicht das, was Ihr sucht, dann würde ich vorschlagen, eine repräsentative Stichprobe von Ihrer Logdateien und erwartete Ausgabe veröffentlichen.

+0

Fast da, Danke Der erste Lauf ist in Ordnung 'echo" $ (cat $ LOG_FILE | grep WARNUNG | tail -n 2k | ts "LETZTES" | awk '{n = gsub ("LETZTES", X); wenn (n) "LETZTES", n, $ 0 drucken; sonst drucken} ') "> $ LOG_FILE' Aber der zweite Durchlauf gibt dies: ' LETZTE 2 2 1 WARNUNG ... LETZTE 2 1 WARNUNG:. .. LETZTE 1 WARNUNG: ... ' – papampi

+0

Wie ich bereits erwähnt habe, basierte es auf einigen Annahmen, ohne zu wissen, wie Ihr Eingabe-Log aussieht. Stellen Sie also ein repräsentatives Beispiel Ihrer Eingabeprotokolldatei und der erwarteten Ausgabe bereit. Schreibe auch was genau 'ts' tut. – Yoda

+0

Bereits editierter erster Post und ich denke, ich habe alle benötigten hinzugefügt, ts kommt aus dem moreutils-Paket, es fügt "LAST" am Anfang jeder Zeile des Logs hinzu – papampi

0

Dies ist etwas, das helfen könnten: -

awk ' 
     { 
       n = gsub("LAST ",X) 
       if(n) 
       { 
         for (i = 1; i <= NF; i++) 
         { 
           if ($i ~ /WARNING/) 
           { 
             sub(/^ */,X) 
             print "LAST",n,$0; 
             next 
           } 
           if ($i ~ /^[0-9]$/) 
           { 
             n += $i 
             $i = "" 
           } 
         } 
       } 
       else 
         print $0 
     } 
' 
Verwandte Themen