我有一个大型日志文件,其中包含以下各种条目(\n
表示换行符):
111111,GO,2018-08-09 14:10:32.805,1,xxxxxxxxx,yyyy,I \n
,NAME-01/0.3-445.44,, \n
\n
222222,STOP,.......................
每个日志条目均以5到9位数字开头。有时,日志条目会分成多行。发生这种情况时,日志条目满足以下条件:
,
<逗号> 上面的示例显示第一个日志条目就是这种情况。第二个没有。
如上例所示,
我想将多行条目连接成一行,并删除所有虚假空格。
以上结果应变为:
111111,GO,2018-08-09 14:10:32.805,1,xxxxxxxxx,yyyy,I,NAME-01/0.3-445.44,,
222222,STOP,.......................
我该如何实现?
答案 0 :(得分:0)
根据您写的条件,可能会帮助您解决问题的工具是Awk:
([A-Za-z0-9 ()€_-]+)(?<!_t)\.jpg
这将输出:
awk '!/^[[:blank:]]+(,|$)/{print p; p=""}
{ gsub(/(^[[:blank:]]*|[[:blank:]]*$)/,"",$0); p = p $0 }
END {print p}' logfile
它以下列方式工作:
111111,GO,2018-08-09 14:10:32.805,1,xxxxxxxxx,yyyy,I,NAME-01/0.3-445.44,,
222222,STOP,.......................
::每次找到一行不以空格开头,后跟逗号或仅以空格开头的行,它将打印保存日志的变量!/^[[:blank:]]+(,|$)/{print p; p=""}
输入并清除该变量。p
::它将始终将当前日志文件行连接到变量{ gsub(/(^[[:blank:]]*|[[:blank:]]*$)/,"",$0); p = p $0 }
,但首先,它将删除该行开头和结尾的所有空白线。p
::到达文件末尾时,它仍然需要打印一个已构建的日志条目。