Regex 正则表达式从日志条目中提取第n个元素

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

我正在处理的日志数据的格式如下:

格式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:

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