首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打印数组或文件的一部分并在shell中进行排序

打印数组或文件的一部分并在shell中进行排序
EN

Stack Overflow用户
提问于 2016-08-16 17:11:05
回答 4查看 120关注 0票数 0

我有一个文本文件如下

代码语言:javascript
运行
复制
     1 : dis conn(*) type(CONN) all where(UOWLOG ne '')
AMQ8276: Display Connection details.
   CONN(AE1CA9572C47D822)                
   EXTCONN(414D51434D5147575032202020202020)
   TYPE(CONN)                            
   PID(9098)                               TID(503215) 
   APPLDESC(WebSphere MQ Channel)       
   APPLTAG(WebSphere MQ Client for Java)
   APPLTYPE(USER)                          ASTATE(NONE)
   CHANNEL(ABIS.CLIENT)           CLIENTID( )
   CONNAME(101.54.151.80)               
   CONNOPTS(MQCNO_HANDLE_SHARE_BLOCK,MQCNO_FASTPATH_BINDING)
   USERID(malth)                         UOWLOG(S0599315.LOG)
   UOWSTDA(2016-08-16)                     UOWSTTI(11.06.38)
   UOWLOGDA(2016-08-16)                    UOWLOGTI(11.06.38)
   URTYPE(QMGR)                         
   EXTURID(XA_FORMATID[] XA_GTRID[] XA_BQUAL[])
   QMURID(0.190537069)                     UOWSTATE(ACTIVE)
AMQ8276: Display Connection details.
   CONN(AE1CA957D787F429)                
   EXTCONN(414D51434D5147575032202020202020)
   TYPE(CONN)                            
   PID(28292)                              TID(1519092) 
   APPLDESC(WebSphere MQ Channel)       
   APPLTAG(WebSphere MQ Client for Java)
   APPLTYPE(USER)                          ASTATE(NONE)
   CHANNEL(SB.CLIENT)                  CLIENTID( )
   CONNAME(101.54.151.119)              
   CONNOPTS(MQCNO_HANDLE_SHARE_BLOCK,MQCNO_FASTPATH_BINDING)
   USERID(sbp)                         UOWLOG(S0599317.LOG)
   UOWSTDA(2016-08-16)                     UOWSTTI(11.07.38)
   UOWLOGDA(2016-08-16)                    UOWLOGTI(11.07.38)
   URTYPE(QMGR)                         
   EXTURID(XA_FORMATID[] XA_GTRID[] XA_BQUAL[])
   QMURID(0.190520281)                     UOWSTATE(ACTIVE)
AMQ8276: Display Connection details.
   CONN(2CC7AE57CE8E6221)                
   EXTCONN(414D51434D5147575032202020202020)
   TYPE(CONN)                            
   PID(22400)                              TID(647335) 
   APPLDESC(WebSphere MQ Channel)       
   APPLTAG(WebSphere MQ Client for Java)
   APPLTYPE(USER)                          ASTATE(NONE)
   CHANNEL(U90785.CBM.CLIENT)              CLIENTID( )
   CONNAME(101.54.163.37)               
   CONNOPTS(MQCNO_HANDLE_SHARE_BLOCK,MQCNO_FASTPATH_BINDING)
   USERID(machlth)                         UOWLOG(S0599317.LOG)
   UOWSTDA(2016-08-16)                     UOWSTTI(11.07.40)
   UOWLOGDA(2016-08-16)                    UOWLOGTI(11.07.40)
   URTYPE(QMGR)                         
   EXTURID(XA_FORMATID[] XA_GTRID[] XA_BQUAL[])
   QMURID(0.190574800)                     UOWSTATE(ACTIVE)
AMQ8276: Display Connection details.
   CONN(2CC7AE571BF0B721)                
   EXTCONN(414D51434D5147575032202020202020)
   TYPE(CONN)                            
   PID(22210)                              TID(1069968) 
   APPLDESC(WebSphere MQ Channel)       
   APPLTAG(WebSphere MQ Client for Java)
   APPLTYPE(USER)                          ASTATE(NONE)
   CHANNEL(APP.CLIENT)                  CLIENTID( )
   CONNAME(101.54.163.127)              
   CONNOPTS(MQCNO_HANDLE_SHARE_BLOCK,MQCNO_FASTPATH_BINDING)
   USERID(apsp)                            UOWLOG(S0599317.LOG)
   UOWSTDA(2016-08-16)                     UOWSTTI(11.07.29)
   UOWLOGDA(2016-08-16)                    UOWLOGTI(11.07.29)
   URTYPE(QMGR)                         
   EXTURID(XA_FORMATID[] XA_GTRID[] XA_BQUAL[])

现在我要我的输出显示

代码语言:javascript
运行
复制
ABIS.CLIENT,101.54.151.80,malth,S0599315.LOG,11.06.38
APP.CLIENT,101.54.163.127,apsp,S0599317.LOG,11.07.29
SB.CLIENT,101.54.151.119,sbp,S0599317.LOG,11.07.38
CBM.CLIENT,101.54.163.37,machlth,S0599317.LOG,11.07.40

因此,基本上,获取通道名称,conname,userid,UUOWLOG和UOWLOGTI,最后通过UOWLOGTI对其进行排序。我试着用贝壳来做这件事。

我尝试过使用awk,但似乎无法获得所需的输出。

cat UOWLOG.txt|awk -vRS="" 'BEGIN{printf ""}/\<'AMQ8276'\>/^CHANNEL{printf $0 RT}' --当我在awk中尝试不同的选项时,会出现错误。请帮帮忙。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-16 17:50:11

所有这些都可以在awk中完成,但使用一系列工具可能更容易

代码语言:javascript
运行
复制
$ grep -oP '(CHANNEL|CONNAME|USERID|UOWLOG|UOWLOGTI)\(.*?\)' file | 
  awk -F'[()]' '{ORS=NR%5?",":RS; print $2}' | 
  sort -t, -k5

ABIS.CLIENT,101.54.151.80,malth,S0599315.LOG,11.06.38
APP.CLIENT,101.54.163.127,apsp,S0599317.LOG,11.07.29
SB.CLIENT,101.54.151.119,sbp,S0599317.LOG,11.07.38
U90785.CBM.CLIENT,101.54.163.37,machlth,S0599317.LOG,11.07.40
票数 2
EN

Stack Overflow用户

发布于 2016-08-16 18:00:18

我的解决方案类似于@karakfa,但对字段顺序没有任何假设:

代码语言:javascript
运行
复制
$ grep -o '^\w\+:\|\w\+[(][^)]\+[)]' file |
  awk -F '[()]' -v OFS="," 'function printValues() { if ("CHANNEL" in p) { print p["CHANNEL"], p["CONNAME"], p["USERID"], p["UOWLOG"], p["UOWLOGTI"] } } /^\w+:/ { printValues(); delete p; next } { p[$1] = $2 } END { printValues() }' |
  sort -t, -k 5

我所做的是为每个“记录”创建一个关联数组,然后只打印所需的字段。

票数 1
EN

Stack Overflow用户

发布于 2016-08-16 18:13:54

我的lil有点脏的gnu awk解决方案:

代码语言:javascript
运行
复制
$ awk -v RS="AMQ" 'NR>1{
print gensub(/.*CHANNEL\(([^)]+).*CONNAME\(([^)]+).*USERID\(([^)]+).*UOWLOG\(([^)]+).*UOWLOGTI\(([^)]+).*/,"\\1,\\2,\\3,\\4,\\5","1")}' file | sort -t "," -k5
ABIS.CLIENT,101.54.151.80,malth,S0599315.LOG,11.06.38
APP.CLIENT,101.54.163.127,apsp,S0599317.LOG,11.07.29
SB.CLIENT,101.54.151.119,sbp,S0599317.LOG,11.07.38
U90785.CBM.CLIENT,101.54.163.37,machlth,S0599317.LOG,11.07.40
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38980757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档