使用 awk 或 sed 或其他方式解析复杂的日志文件



我有这样的日志文件:

 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

我的建议,很大的缺点它不能处理sometext的空间

awk -F' - ' '{ for(i=1;i<=NF;i++){ split($i,x," "); printf("%s %s %s;%s;%sn",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;%sn"准备输出

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

x[4],x[5]接下来的两个%s,月份和时间

substr(x[2],0,length(x[2]))昵称减去 : 在末尾

substr(x[3],0,length(x[3])-1))文本字段中,减去当天的 2 个字符

最新更新