[英]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.