2

次のような入力があります。

Curveplot
Time
Maxima of Curve
Part no.
13 #pts=2
* Minval=   0.000000e+000 at time=        0.000000
* Maxval=   2.237295e+000 at time=        0.001000
   0.000000e+000       0.000000e+000
   9.999999e-004       2.237295e+000
endcurve

このファイルから最大値を取得したいのですが、これは Maxval の後の値です

* Maxval=   2.237295e+000 

誰かが linux sed でそれを行う方法を提案できますか? 私の出力は数値 2.237295e+000 だけです。

4

5 に答える 5

5

次のワンライナーを使用すると、表示のみが行われます2.237295e+000

sed -nr 's/.*Maxval= *([^ ]*).*/\1/p'

正規表現:

Match:
.*      # match any characters
Maxval= # upto 'Maxval='
 *      # match multiple spaces (that is a space followed by *)
([^ ])  # match anything not a space, use brackets to capture (save this) 
.*      # match the rest of line

Replace with:
\1      # the value that a was captured in the first set of brackets. 

したがって、効果的に、単語を含む行全体をMaxval=の値で置き換えますMaxval

注: のプラットフォームや実装によっては、 の代わりにsedを使用する必要がある場合があります。-E-r

于 2012-11-14T11:01:38.953 に答える
2

一方通行:

sed -n 's/.*Maxval=\s*\([^ ]*\).*/\1/p' file.txt

結果:

2.237295e+000
于 2012-11-14T10:53:08.483 に答える
0

grep を使用して実行することもできます。

<infile grep -o 'Maxval= *[^ ]\+' | grep -o '[^ ]\+$'

出力:

2.237295e+000
于 2012-11-14T12:57:50.940 に答える
0

提案:

cat test.txt | grep Maxval | sed -e 's/^.*Maxval= *//' -e 's/ at.*$//' 2.237295e+000

  • cat はファイルを stdout に表示します
  • grep は興味深い行のみを保持します
  • 最初の sed 正規表現は、スペースの終わりまで行頭を削除します
  • 2番目のsed正規表現は、行末まで「at」を削除します
于 2012-11-14T10:55:45.543 に答える
0
awk '/Maxval=/{print $3}' your_file

以下でテスト:

> cat temp
Curveplot
Time
Maxima of Curve
Part no.
13 #pts=2
* Minval=   0.000000e+000 at time=        0.000000
* Maxval=   2.237295e+000 at time=        0.001000
   0.000000e+000       0.000000e+000
   9.999999e-004       2.237295e+000
endcurve
> awk '/Maxval=/{print $3}' temp
2.237295e+000
于 2012-11-14T11:01:11.217 に答える