-1

我有一个文件,其中包含大量以下格式的行,

/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain   ******* (fakesink0:sink) (184320 bytes, timestamp: 0:00:00.266666666, duration: 0:00:00.066666667,     offset: -1, offset_end: -1, flags: 0 ) 0xb5d1e878"

在这一行的内容中,我只对时间戳感兴趣。即我只需要00.266666666。我每天都需要很多其他类似的东西。什么是最好的方法来做到这一点。哪种脚本语言可以轻松有效地处理这些事情?

4

3 回答 3

1

任何具有正则表达式功能的脚本语言都可以执行这样的任务;这将包括awk, python, perl(所有这些通常都可以在 Linux 安装中找到)和许多其他的。学习使用正则表达式是值得的,但请注意,每种语言都有自己的正则表达式库,但存在细微差别。

但是很多这样的问题可以用普通的bash工具grep(也基于正则表达式)轻松解决。对于这个特定的问题,您可以使用以下内容:

grep -oE 'timestamp:[^,]*' | grep -oE '[0-9]*$'

(这假设您只需要时间戳中的秒数;您实际上可能希望0:00:通过将时间戳添加到第一个正则表达式来检查时间戳是否以开头。

grep 选项:

-E    Use "extended" regular expressions.
-o    Only print the part of the line which matches

常用表达:

[^,]*   Match any number of characters other than `,`
[0-9]*$ Match any number of digits (characters from `0` to `9`)
        at the end of the line (`$`)

另一种方法:

grep -oE 'timestamp:[^,]*' | cut -d: -f4

第二部分:从每一行中选择第四个分隔的字段。

于 2013-06-24T15:53:50.420 回答
0

我喜欢来完成这种任务。它接受正则表达式作为字段分隔符,因此它为您提供了在所需字段中拆分行的强大功能。

在这种情况下,它可以像冒号和逗号一样工作,然后从头开始计数:

awk -F'[:,]' '{ print $9 }' infile

它产生:

00.266666666
于 2013-06-24T15:44:34.043 回答
-1

Unix Bash shell 脚本是此类任务的最佳选择。您可以使用 google 轻松学习如何使用它进行解析。

于 2013-06-24T15:48:01.320 回答