2016-10-03 14 views
-3

Ich habe eine Protokolldatei auf UNIX-Server und ich versuche nach einzelnen Muster zu suchen und mehrere Zeichenfolgen aus dem Protokoll zu drucken.Suchen und Drucken in Unix

Für Beispiel Protokoll ist wie folgt:

2016-01-01 10:10:10.234 SEND <Msg><Name>XYZ</Name><ID>1231231</ID></Msg> 
2016-01-01 10:10:10.333 RECIEVE <Msg><Name>XYZ</Name><ID>1231231</ID></Msg> 
2016-01-01 10:10:11.434 SEND <Msg><Name>ABC</Name><ID>2231231</ID></Msg> 
2016-01-01 10:10:11.533 RECIEVE <Msg><Name>ABC</Name><ID>2231231</ID></Msg> 

ich für 'Senden' gesucht werden soll und die Ausgabe wie folgt drucken:

10:10:10 1231231 
10:10:11 2231231 

Thanx im Voraus

+0

Welche Sprache verwenden Sie? Vielleicht wäre unter Unix StackExchange besser geeignet. Wie auch immer, lesen Sie über regulären Ausdruck in Sprachen wie Python oder verwenden Sie den Befehl grep zusammen mit awk, um die gewünschten Informationen zu extrahieren. – gonczor

+1

Haben Sie versucht, das zu lösen? Welche Probleme hast du gesehen? – Inian

+0

Ich versuche nur in Shell-Skripten. Ich habe es versucht, aber ich kann nur die erste oder zweite Saite drucken. –

Antwort

0

Dank euch allen, die mir geholfen. Ich kann das Ergebnis erzielen. Unten ist der Befehl, den ich verwendet habe:

cat test.txt | grep "SEND" | sed 's/<\/ID>.*//g'|awk 'BEGIN {FS=" |>"} {print $2, $NF}' 
0

Ich glaube, Sie kann dieses Programm versuchen:

#!/bin/bash 

awk '{ 
    if($3 == "SEND") { 
     gsub(/\..*/, "", $2) 
     match($4, /<ID>([0-9]+)<\/ID>/, ary) 
     printf "%s %s\n", $2, ary[1] 
    } 
}' input.txt 

Die input.txt ist Ihr Beispiel log, und die Ausgabe des obigen Programms ist:

10:10:10 SEND 
10:10:11 SEND 
+1

Obwohl es ein guter Versuch ist, beantwortet es nicht die tatsächliche Anforderung des Autors, überprüfen Sie bitte Ihre Ausgabe mit der erwarteten Ausgabe des Autors. – Inian

+0

@Inian, Oh ja. Ich habe die Frage falsch gelesen. Jetzt habe ich meine Frage behoben. –

Verwandte Themen