Regex 正则表达式从日志条目中提取第n个元素
我正在处理的日志数据的格式如下: 格式1:Regex 正则表达式从日志条目中提取第n个元素,regex,awk,Regex,Awk,我正在处理的日志数据的格式如下: 格式1: 2015-01-03T18:52:06Z Sat, 03 Jan 2015 18:52:05 GMT GET /images/title2.png 304 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.10 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.10 Dublin 上述条目中的字段以“空格”分隔 格式2: 2
2015-01-03T18:52:06Z Sat, 03 Jan 2015 18:52:05 GMT GET /images/title2.png 304 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.10 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.10 Dublin
上述条目中的字段以“空格”分隔
格式2:
2015-01-03T18:52:06Z|Sat, 03 Jan 2015 18:52:05|GMT|GET|/images/title2.png 304| Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.10 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.10|Dublin
上述条目中的字段以“垂直管线”分隔
问题:
由于字段的数量不变,我希望创建一个正则表达式来提取在第n个“垂直管线”或第n个“空间”之后出现的字段,一直到下一次遇到“垂直管线”或“空间”为止。这对于:
其中$9是第9个元素(用空格或
|
分隔)它应该是-F'[|]'
。您的解决方案说分隔符是两个字符,而不是非此即彼。不,对于gnu awk,它是相同的输出。未进行其他测试问题在于,在提供的数据中,由|
分隔的第9个元素与由“``分隔的第9个元素(空白)不同。好的,删除了第一个解决方案。这两种格式不可互换,因为数据中也有空格。例如,GMT
在格式1的第7个字段中,但在格式2的第3个字段中。如果需要查询两种格式的混合,则不能只搜索第n个元素。由于字段通常包含空格,因此必须定义如何区分作为字段分隔符的空格和作为内容的空格。就目前而言,你的问题无法回答。
awk -F'[ |]' '{print $9}' file