我有这样的日志文件:
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 个字符