如何将日志文件的行转换为列?

时间:2012-07-25 08:48:40

标签: unix awk

考虑如下日志文件

Operation=someOperation
RequestId=giufiudf-fdsfdsg0-314243-df45
RemoteIpAddress=192.168.1.1
Time=151010.473 ms
EndTime=Tue, 24 Jul 2012 22:23:46 UTC
StartTime=1343168475.480
EOE
------------------------------------------------------------------------

Operation=someOtherOperation
RequestId=giufiu2323df-fdssadasfdsg0-31424sdesa3-df45
RemoteIpAddress=192.168.1.1
Time=1210.473 ms
EndTime=Tue, 24 Jul 2012 22:23:46 UTC
StartTime=1342128475.480
EOE
------------------------------------------------------------------------

...

我希望以这种格式输出

Operation          RequestId     RemoteIpAddress    Time          EndTime    StartTime
someOperation         <req id>      192.168.1.1     151010.473 ms  <end Time>  <start time>
someOtherOperation    <req id>      192.168.1.1     1210.473 ms    <end Time>  <start time>

提前致谢.. !!

2 个答案:

答案 0 :(得分:2)

http://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html
http://www.gnu.org/software/gawk/manual/html_node/Concatenation.html

BEGIN {
    FS="="
}

$0~/^EOE/ {
    if (!f) {
    print header
    f = 1
    }
    print data
    data = ""
}

NF==2 {
   data = data " " $2
}

!f {
    header = header " " $1
}

答案 1 :(得分:1)

使用awk的一种方式:

awk -F= 'BEGIN { RS=""; OFS="\t" } { for (i = 1; i < NF - 1; i++) { if (i%2==1 && NR == 1) header = (header ? header OFS : "") $i; else if (i%2==0) line = (line ? line OFS : "") $i; } if (header != "") { print header; } print line; header = line = "" }' file.txt

分为多行:

BEGIN {
    RS = ""
    FS= "="
    OFS = "\t"
}

{
    for (i = 1; i < NF - 1; i++) {
        if (i%2==1 && NR == 1) {
            header = (header ? header OFS : "") $i
        }
        else if (i%2==0) {
            line = (line ? line OFS : "") $i
        }
    }

    if (header != "") { print header }
    print line; header = line = ""
}

输出:

Operation   RequestId   RemoteIpAddress Time    EndTime StartTime
someOperation   giufiudf-fdsfdsg0-314243-df45   192.168.1.1 151010.473 ms   Tue, 24 Jul 2012 22:23:46 UTC   1343168475.480
someOtherOperation  giufiu2323df-fdssadasfdsg0-31424sdesa3-df45 192.168.1.1 1210.473 ms Tue, 24 Jul 2012 22:23:46 UTC   1342128475.480