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'这个词,因为它是不明确的 - 总是说你想要字符串还是正则表达式匹配,以及如果你想匹配整行(或单词或其他)或部分行(或...)甚至跨行。 –