Hallo Ich habe eine Textdatei mit Hunderten von Zeilen. Hier ist ein Beispiel.awk zum Drucken Teil eines Arrays in der Shell
Array 1 - JVMAZURE,/www/deploy/DEV/JVMAZURE/ReceiveResponseFromAzureDEV,com.azure.ReceiveResponseFromAzure
JVM - JVMAZURE
Node - com.azure.ReceiveResponseFromAzure
Jar - /www/deploy/DEV/JVMAZURE/ReceiveResponseFromAzureDEV
AXIOM.SVAP.IN
LOG.XML.INPUT
SERVADMIN.ERROR
SERVADMIN.INPUT
TIMEOUT.IN
---------------------------------------------------------------------------------------------
Array 2 - JVMAZURE,/www/deploy/DEV/JVMAZURE/ReceiveResponse,com.azure.RecivedResponse
JVM - JVMAZURE
Node - com.azure.RecivedResponse
Jar - /www/deploy/DEV/JVMAZURE/ReceiveResponseDEV
AXIOM.SVAP.IN
EXCEPTION.QUEUE
SERVADMIN.ERROR
SERVADMIN.INPUT
---------------------------------------------------------------------------------------------
Array 3 - JVMAZURE1,/www/deploy/DEV/JVMAZURE1/SendMessageToAzureCloudDEV,com.azure.SendMessageToAzureCloud
JVM - JVMAZURE1
Node - com.azure.SendMessageToAzureCloud
Jar - /www/deploy/DEV/JVMAZURE1/SendMessageToAzureCloudDEV
AZURE.SVAP.IN
LOG.XML.INPUT
AXIOM.SERVADMIN.OUTPUT
SERVADMIN.ERROR
SB.OUT
TIMEOUT.IN
---------------------------------------------------------------------------------------------
Array 4 - JVMAZURE2,/www/deploy/DEV/JVMAZURE2/SendMessageFromAzureCloudDEV,com.azure.SendMessageFromAzureCloud
JVM - JVMAZURE2
Node - com.azure.SendMessageFromAzureCloud
Jar - /www/deploy/DEV/JVMAZURE2/SendMessageFromAzureCloudDEV
AZURE.SVAP.IN
SERVADMIN.ERROR
TIMEOUT.IN
---------------------------------------------------------------------------------------------
Ich versuche, für die Linien/Muster unter dem Jar grep oder awk und versuchen, die JVM, Knoten und diese Zeile ich suche zu drucken.
Also, wenn ich für AXIOM.SVAP.IN
bin auf der Suche, möchte ich die Ausgabe
JVMAZURE,com.azure.ReceiveResponseFromAzure,AXIOM.SVAP.IN
JVMAZURE,com.azure.RecivedResponse,AXIOM.SVAP.IN
sein oder wenn ich für SERVADMIN.ERROR
Suche bin möchte ich die Ausgabe
JVMAZURE,com.azure.ReceiveResponseFromAzure,SERVADMIN.ERROR
JVMAZURE,com.azure.RecivedResponse,SERVADMIN.ERROR
JVMAZURE1,com.azure.SendMessageToAzureCloud,SERVADMIN.ERROR
JVMAZURE2,com.azure.SendMessageFromAzureCloud,SERVADMIN.ERROR
ich habe zu sein versucht, awk aber habe keine konsistenten Ergebnisse.
cat AZURE.txt|awk -v OFS=, -v r="^'|'$" '/SERVADMIN.ERROR/ { p=$NF; gsub(r,"",p) } /EG/ { e=$NF } /Flow/ {f=$NF; gsub(r,"",f); print e,f,p }'
ist yiedling mich
JVMAZURE,com.azure.ReceiveResponseFromAzure,
JVMAZURE,com.azure.RecivedResponse,SERVADMIN.ERROR
JVMAZURE1,com.azure.SendMessageToAzureCloud,SERVADMIN.ERROR
JVMAZURE2,com.azure.SendMessageFromAzureCloud,SERVADMIN.ERROR
Und das gleiche Ergebnis mit der Linie/geändert Muster, wenn ich für AXIOM.SVAP.IN
Dies funktioniert nur für AXIOM.SVAP.IN. Wenn ich das Muster als SERVADMIN.ERROR habe, gibt es mir ein Leerzeichen. Gibt es auch eine Möglichkeit, dies in einer einzigen Zeile zu tun. – user3164754
Ich habe meine Antwort bearbeitet, um eine Lösung zu zeigen, die eine mögliche Interpretation Ihrer Anforderungen anspricht (String passt zu ganzen Zeilen). Verwende nie das Wort 'pattern', da es mehrdeutig ist - sage immer, ob du Streich- oder Regexp-Treffer möchtest und ob Übereinstimmungen in ganzen Zeilen (oder Wörtern oder was auch immer) oder Teilzeilen (oder ...) oder sogar in Zeilen vorhanden sein sollen. –