我有这样的日志文件:
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
:
之前打印昵称。在:
之后打印文字。
但是我如何解析文本和日期值?
答案 0 :(得分:2)
试试这行:
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
答案 1 :(得分:0)
我的建议,在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个字符