2012-07-25 43 views
0

考慮一個日誌文件,如下如何將日誌文件的行轉換爲列?

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> 

謝謝..!

回答

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