2
你好,我有一個包含數百行的文本文件。這是一個示例。awk在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
---------------------------------------------------------------------------------------------
我試圖到grep或AWK的罐下方的線/模式和要打印的JVM,節點和線我正在尋找。
所以,如果我尋找AXIOM.SVAP.IN
,我所要的輸出是
JVMAZURE,com.azure.ReceiveResponseFromAzure,AXIOM.SVAP.IN
JVMAZURE,com.azure.RecivedResponse,AXIOM.SVAP.IN
,或者如果我在尋找SERVADMIN.ERROR
我想要的輸出爲
JVMAZURE,com.azure.ReceiveResponseFromAzure,SERVADMIN.ERROR
JVMAZURE,com.azure.RecivedResponse,SERVADMIN.ERROR
JVMAZURE1,com.azure.SendMessageToAzureCloud,SERVADMIN.ERROR
JVMAZURE2,com.azure.SendMessageFromAzureCloud,SERVADMIN.ERROR
我有試過awk,但沒有得到任何一致的結果。
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 }'
是yiedling我
JVMAZURE,com.azure.ReceiveResponseFromAzure,
JVMAZURE,com.azure.RecivedResponse,SERVADMIN.ERROR
JVMAZURE1,com.azure.SendMessageToAzureCloud,SERVADMIN.ERROR
JVMAZURE2,com.azure.SendMessageFromAzureCloud,SERVADMIN.ERROR
並與線相同的結果/模式改變,如果我搜索AXIOM.SVAP.IN
這隻適用於AXIOM.SVAP.IN。如果我將模式設置爲SERVADMIN.ERROR,它會給我一個空白。另外,有沒有一種方法可以在單行中完成此操作。 – user3164754
我編輯了我的答案,以顯示解決方案,解決您的需求的一個可能的解釋(整個字符串匹配)。不要使用'pattern'這個詞,因爲它是不明確的 - 總是說你想要字符串還是正則表達式匹配,以及如果你想匹配整行(或單詞或其他)或部分行(或...)甚至跨行。 –