簡體   English   中英

使用awk或sed或其他解析復雜的日志文件

[英]Parsing complex log file with awk or sed or other

我有這樣的日志文件:

 ZZ nickname1: sometexthere17 Jan 10:19PM - ZZ nickname2: sometexthere19 Jan 11:19PM - ZZ nickname3: sometexthere20 Jan 09:21PM - ...

ZZ static value nickname dynamic and I need to print after : sometexthere dynamic and I need to print after text there is no space and it is date value(17 Jan 10:19PM -) - is a separate

我需要將輸出打印到csv文件中,如下所示:

Date;Nickname;Text 17 Jan 10:19PM;nickname1;sometexthere ...

我可以使用awk -F解析相同的內容。 如何在示例中使用awk或sed?

我想我需要在ZZ之后打印:以獲取昵稱。 :之后打印以獲取文字。

但是,如何解析文本和日期值?

試試這一行:

 awk -F': ' -v RS="-" -v OFS=";" 
      '{sub(/ZZ /,"",$1);n=length($2);
        sub(/\n/,"",$2); d=substr($2,n-14);
        s=substr($2,1,n-15);print d,$1,s}' logFile

魔術數字14是日期字符串的長度,例如17 Jan 10:19PM

我的建議,BIG的缺點是無法處理sometext

awk -F' - ' '{ for(i=1;i<=NF;i++){ split($i,x," "); printf("%s %s %s;%s;%s\\n",substr(x[3],length(x[3])-1), x[4],x[5],substr(x[2],0,length(x[2])),substr(x[3],0,length(x[3])-1))} }' test

怎么做的:

-F' - '在空間上拆分字段-空間

for(i=1;i<=NF;i++)遍歷字段

split($i,x," "); 從每個字段創建一個新數組(ZZ [...])

printf("%s %s %s;%s;%s\\n"准備輸出

substr(x[3],length(x[3])-1)前%s,日期,拆分后第3個字符的最后2個字符

x[4],x[5]接下來的兩個%s,月份和時間

substr(x[2],0,length(x[2]))昵稱減去末尾的:

substr(x[3],0,length(x[3])-1))文本字段,減去當天的2個字符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM