-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、 、pythonperl(通常、これらはすべて 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

2 番目の部分は:、各行から で区切られた 4 番目のフィールドを選択します。

于 2013-06-24T15:53:50.420 に答える
0

私はこの種のタスクのためにが好きです。フィールドセパレーターとして正規表現を受け入れるため、必要なフィールドで行を分割する強力な機能を提供します。

この場合、コロンとコンマのように機能し、最初から数えることができます。

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

次の結果が得られます。

00.266666666
于 2013-06-24T15:44:34.043 に答える
-1

Unix Bash シェル スクリプトは、このようなタスクに最適です。Google を使用して解析を行う方法を簡単に学ぶことができます。

于 2013-06-24T15:48:01.320 に答える