首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Awk将输出与行中的列对齐

Awk将输出与行中的列对齐
EN

Stack Overflow用户
提问于 2020-08-26 07:34:38
回答 1查看 63关注 0票数 1

以下是根据避难所的建议更改的输入数据。如果现在可以处理,请支持

代码语言:javascript
复制
> Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 OPER=RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=511a3f0345bb4030acfccdb7b7d308b6,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 OPER=RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=511a3f0345bb4030acfccdb7b7d308b6,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 OPER=RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=511a3f0345bb4030acfccdb7b7d308b6,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 OPER=RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=511a3f0345bb4030acfccdb7b7d308b6,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 OPER=RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=511a3f0345bb4030acfccdb7b7d308b6,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 OPER=RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=511a3f0345bb4030acfccdb7b7d308b6,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)

重试

代码语言:javascript
复制
    awk 'BEGIN {
        HCNT = split("OPER|usr|description|req|TMUnitTroup|SUBTNode", COLN, "|")
        TMP = split("40 40 40 18 10 14 23", FLEN, FS)
        FMT = "%-*.*s "
        for (i = 1; i <= HCNT; i++) {
                printf FMT, FLEN[i], FLEN[i], COLN[i]
        }
        printf "Count" ORS
}

{
        OUT = ""
        for (i = 1; i <= HCNT; i++) {
                match($0, COLN[i] "[^ ]*")
                TMP = substr($0, RSTART, RLENGTH)
                sub(/^[^ ,]*= /, _, TMP)
                OUT = OUT sprintf(FMT, FLEN[i], FLEN[i], TMP)
        }
        T[OUT]++
}

END {
        for (t in T) {
                print t, T[t]
        }
}' tudberr
OPER                                     usr                                      description                              req                TMUnitTrou SUBTNode       Count

我希望这次我的awk代码可读.Here是输入文件。

代码语言:javascript
复制
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=1234asdbfghueikjla5342789157b3,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=1234asdbfghueikjla5342789157b3,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=1234asdbfghueikjla5342789157b3,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=1234asdbfghueikjla5342789157b3,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=1234asdbfghueikjla5342789157b3,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)
Aug 25 17:21:39 DL_2_11 dpat[999]: tons=1012 op=586988 RESERCH ANSWER tag=101 usr=80 nentries=0 description=Read usror on tonsection to target req=serv=psts,TMUnitTroup=10,cmsId=1234asdbfghueikjla5342789157b3,pu=multiple,SUBTNode=21,pt=pmp filter=(objectClass=*)

我需要通过读取上述文件生成以下输出。输出应该在如下所示的列中,以总结此日志。

代码语言:javascript
复制
  op      usr description                        req       TMUnitTroup SUBTNode COUNT
RESERCH 80  Read usror on tonsection to target serv=psts 10          21       6

我尝试了下面的代码,但输出结果并不完全符合我的需要

代码语言:javascript
复制
    awk 'BEGIN {
        HCNT = split("op|usr|description|req|TMUnitTroup|SUBTNode", COLN, "|")
        TMP = split("40 40 40 18 10 14 23", FLEN, FS)
        FMT = "%-*.*s "
        for (i = 1; i <= HCNT; i++) {
                printf FMT, FLEN[i], FLEN[i], COLN[i]
        }
        printf "Count" ORS
}

{
        OUT = ""
        for (i = 1; i <= HCNT; i++) {
                match($0, COLN[i] "[^ ]*")
                TMP = substr($0, RSTART, RLENGTH)
                sub(/^[^ ,]*= /, _, TMP)
                OUT = OUT sprintf(FMT, FLEN[i], FLEN[i], TMP)
        }
        T[OUT]++
}

END {
        for (t in T) {
                print t, T[t]
        }
}' tudberr

Output i got is


op                                       usr                                      description                              req                TMUnitTrou SUBTNode       Count
op=586988                                usr=80                                   description=Read                         req=serv=psts,TMUn TMUnitTrou SUBTNode=21,pt  6
                                                                                                                                                                         1
EN

回答 1

Stack Overflow用户

发布于 2020-08-26 14:48:20

正如shellter所说,“让你的数据更容易处理”:

代码语言:javascript
复制
awk '{ s=""; 
       j=0; 
       for(i=1; i<=NF; i++) { if(index($i,"=")==0)
                                 {k[j]=k[j] FS $i } 
                              else k[++j]=$i; }; 
       for(i in k){ print i,k[i] } 
       delete k; print "" }' tudberr

这将输出(对于输入文件的前3行):

代码语言:javascript
复制
0  Aug 25 17:21:39 DL_2_11 dpat[999]:
1 tons=1012
2 op=586988 RESERCH ANSWER
3 tag=101
4 usr=80
5 nentries=0
6 description=Read usror on tonsection to target
7 req=serv=psts,TMUnitTroup=10,cmsId=1234asdbfghueikjla5342789157b3,pu=multiple,SUBTNode=21,pt=pmp
8 filter=(objectClass=*)

0  Aug 25 17:21:39 DL_2_11 dpat[999]:
1 tons=1012
2 op=586988 RESERCH ANSWER
3 tag=101
4 usr=80
5 nentries=0
6 description=Read usror on tonsection to target
7 req=serv=psts,TMUnitTroup=10,cmsId=1234asdbfghueikjla5342789157b3,pu=multiple,SUBTNode=21,pt=pmp
8 filter=(objectClass=*)

0  Aug 25 17:21:39 DL_2_11 dpat[999]:
1 tons=1012
2 op=586988 RESERCH ANSWER
3 tag=101
4 usr=80
5 nentries=0
6 description=Read usror on tonsection to target
7 req=serv=psts,TMUnitTroup=10,cmsId=1234asdbfghueikjla5342789157b3,pu=multiple,SUBTNode=21,pt=pmp
8 filter=(objectClass=*)

这个输出应该更容易处理...

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63588502

复制
相关文章

相似问题

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