解析文本文件以仅提取所需信息

时间:2013-06-24 15:36:28

标签: parsing text

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

/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。我每天都需要许多其他类似的东西。什么是最好的方法来做到这一点。哪种脚本语言可以轻松有效地处理这些事情?

3 个答案:

答案 0 :(得分:1)

任何具有正则表达式功能的脚本语言都可以执行这样的任务;这将包括awkpythonperl(所有这些通常都在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

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

答案 1 :(得分:0)

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

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

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

它产生:

00.266666666

答案 2 :(得分:-1)

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