2016-12-18 1 views
0

Ich möchte ein Skript erstellen, um Zeilen der Alarmprotokolldatei zu durchlaufen, ein bestimmtes Feld zu extrahieren und dann zu speichern Ergebnis in einer anderen externen Datei. Die extrahierte Information wird dann verwendet, um zusätzliche Befehle auszuführen. HierSkript, um Zeilen der Alarmprotokolldatei zu durchlaufen und einige Codezeilen auszuführen, wenn der Alarm länger als einen Tag aktiv ist.

ist ein Beispiel für die Protokolldatei und die gewünschte o/p:

2016-09-29 23:40:14 GST; 2016.09.29 23.40.14 GST; faultManager : Netzwerk @ ET_AO_L_0165_abcd @ eNBEquip @ eNBInst @ x2Grp-0 @ x2Access-0_424_02_ET_AO_L_0165_abcd_44159 @ x2Transp-0 | alarm-2632-3-698;

2016-11-01 07:10:51 GST; 2016.11.01 07.10.51 GST; faultManager: Netzwerk @ ER_AO_L_4283_abcd @ eNBEquip @ eNBInst @ x2Grp-0 @ x2Access-0_424_02_ER_AO_L_4283_abcd_10197 @ x2Transp-0 | Alarm-2632-3-698;

2016-11-01 07:10:51 GST; 2016.11.01 07.10.51 GST; faultManager: Netzwerk @ ER_AO_L_4283_abcd @ eNBEquip @ eNBInst @ x2Grp-0 @ x2Access-0_424_02_ER_AO_L_4283_abcd_11339 @ x2Transp-0 | Alarm-2632-3-698;

2016-11-01 07:10:51 GST; 2016.11.01 07.10.51 GST; faultManager: Netzwerk @ ER_AO_L_4283_abcd @ eNBEquip @ eNBInst @ x2Grp-0 @ x2Access-0_424_02_ER_AO_L_4283_abcd_14179 @ x2Transp-0 | Alarm-2632-3-698;

2016-11-01 11:26:58 GST; 2016.11.01 11.26.58 GST; faultManager: Netzwerk @ ET_AO_L_0166_abcd @ eNBEquip @ eNBInst @ x2Grp-0 @ x2Access-0_424_02_ET_AO_L_0166_abcd_14126 @ x2Transp-0 | Alarm-2632-3-698;

2016-11-03 10:00:08 GST; 2016.11.03 10.00.08 GST; faultManager: Netzwerk @ ET_AO_L_0193_abcd @ eNBEquip @ eNBInst @ x2Grp-0 @ x2Access-0_424_02_ET_AO_L_0193_abcd_16113 @ x2Transp-0 | Alarm-2632-3-698;

Für jede Zeile überprüfen soll, wenn der Alarm für mehr als einen Tag (Vergleich zu aktuellem Datum) aktiv ist, wenn die Bedingung extrahiert wahr ist, dann den Namen (ex. ET_AO_L_0165_abcd) und an externer Datei verweisen.

Erwartete o/p (Duplikate entfernen):

ET_AO_L_0165_abcd

ER_AO_L_4283_abcd

ET_AO_L_0166_abcd

ET_AO_L_0193_abcd

Vielen Dank im Voraus

+0

Kann die Leerzeile als Datensatztrennzeichen verwendet werden? – sjsam

+0

pls ignorieren die leere Zeile, ich habe es nur hinzugefügt, um es einfacher zu machen, den Inhalt zu überprüfen, thx –

+0

Ist das 'bash' Skript? –

Antwort

2

Sie können ein kleines Skript schreiben, um dies zu erreichen.

declare -a array=($(sed -E 's/^.*faultManager:[email protected]([^@]*)@.*$/\1/' /path/to/log/file)) 
declare -A temp # declaring an associative array ! important. 
for elem in "${array[@]}" 
do 
temp[$elem]=1 # Array keys can't be duplicated, this is the catch here 
done 
for index in "${!temp[@]}" # Taking the indexes which is our required values 
do 
echo $index >>/path/to/result/file #appending the values to a file. 
done 
+0

Danke für Ihre schnelle Antwort, ich habe versucht, aber es gibt einen Fehler "sed: illegale Option - E", zusätzlich würde ich gerne wissen, ob dieser Code auch die Prüfung im Zusammenhang mit Alarm "Datum" in jede Zeile. –

+0

Einige Systeme unterstützen die Option -E nicht, verwenden Sie stattdessen -r – sjsam

Verwandte Themen