首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式帮助解析SQLIO输出

正则表达式帮助解析SQLIO输出
EN

Stack Overflow用户
提问于 2010-03-18 23:05:39
回答 2查看 222关注 0票数 0

我一直在使用一个正则表达式来解析一系列SQLIO运行的输出。我已经走得相当远了,但还没有完全走到那一步。我正在寻求一个100%正则表达式的解决方案,没有预操作的输入。有没有人可以提供一些关于以下正则表达式的指导:

代码语言:javascript
复制
.*v(?<SQLIOVersion>\d\.\d).*\n.*\n(?<threads>\d*)\s.*for\s(?<Seconds>\d+).*\n.*using\s(?<clustersize>[0-9]*)KB.*\n.*\n.*size:\s(?<currentfilesize>\d+).*\n.*\n.*\n.*\n.*\s(?<IOs>\d*\.\d*).*\n.*\s(?<MBs>\d*\.\d*).*\n.*\n.*\s(?<MinLatency_ms>\d+).*\n.*\s(?<AvgLatency_ms>\d+).*\n.*\s(?<MaxLatency_ms>\d+).*\n.*\n.*\n\%\:..(?<ms>\d*\s+)*

下面是输出的一个片段-请注意标头,它们在SQLIO批处理运行期间发生了变化:File

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-19 00:30:03

问题似乎出在这里:

代码语言:javascript
复制
    using 8KB random IOs
    buffering set to use hardware disk cache (but not file cache)

捕获集群大小后,在继续捕获文件大小之前,使用.*\n使用第二行,但有时还有第三行:

代码语言:javascript
复制
    using 8KB random IOs
    enabling multiple I/Os per thread with 8 outstanding
    buffering set to use hardware disk cache (but not file cache)

我将(?:.*\n)?添加到正则表达式的相关部分,现在它匹配所有36个条目。

我知道你想要100%的正则表达式,但是你有没有考虑过用带注释的扩展格式编写正则表达式(例如,IgnorePatternWhitespace模式)?我还建议在regex中使用更多的文字文本,这样更容易理解。例如,

代码语言:javascript
复制
(?<threads>\d+) threads? reading for (?<Seconds>\d+) secs.*\n

而不是

代码语言:javascript
复制
(?<threads>\d*)\s.*for\s(?<Seconds>\d+).*\n

不可读的代码是不可维护的代码,正则表达式需要所有它们可以得到的帮助。:-/

票数 1
EN

Stack Overflow用户

发布于 2010-03-19 01:11:31

让计数行见鬼去吧,只要顺序不变,你可以做下面的事情。哦,在大型正则表达式中使用/x会有所帮助。;)

代码语言:javascript
复制
qr§
^sqlio\s+v(?<SQLIOVersion>\d+\.\d+)

(?> # atomic match, dont backtrack in here when matched
.{0,400}? # dont match so far that we can get the next result
(?<threads>\d+)\s+thread)

(?>.{0,400}?
\b for\s+(?<Seconds>\d+)\s*sec)

(?>.{0,400}?
\b using\s+(?<clustersize>\d+)\s*KB)

(?>.{0,400}?
\b size:\s+(?<currentfilesize>\d+))

(?>.{0,400}?
\b IOs/sec\D*(?<IOs>\d+\.\d+))

(?>.{0,400}?
\b MBs/sec\D*(?<IOs>\d+\.\d+))

(?>.{0,400}?
\b Min_Latency\D*(?<MinLatency_ms>\d+))

(?>.{0,400}?
\b Avg_Latency\D*(?<AvgLatency_ms>\d+))

(?>.{0,400}?
\b Max_Latency\D*(?<MaxLatency_ms>\d+))

(?>.{0,400}?
^\%:\s*(?<ms>(?:\d+\s+)+))

§mixs

PCRE/Perl qr§用于报价。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2470836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档