awkまたはgrep? - キーワードとその後の列印刷

awkまたはgrep? - キーワードとその後の列印刷

ベンチマークをしましたが、出力は次の形式の複数の結果を含む単一のファイルです。

[blaaa]
1st run

T/V   N  NB  P  Q   Time
==========================
2     3   4  1  2   1.02
[blaaaa...]
2nd run
T/V   N  NB  P  Q   Time
==========================
4     42 4  1  2    1.22

私はちょうど私がした様々な実行の実行時間を取得したいと思います。それでは、「Time」をgrepして次の列を印刷することは可能ですか?それとも、印刷して書くこともできます。

1.02
1.22

上記の例では?私はblaa部分ではなく3つの結果列のみを印刷することを好みます:D

答え1

Time常に6番目のフィールドにあるとします。

$ awk '$6 == "Time" {t = NR} t && NR == t+2 {print $6}' file
1.02
1.22

getlineまたは、-fast'n'dirtyを2回使用できます。

awk '$6 == "Time" {getline; getline; print $6}' file

getline(戻り値を確認しないので「ダーティ」です)。

答え2

$ grep -o 'Time\|[0-9\.]\+$' file
Time
1.02
Time
1.22
$ grep -o '[0-9\.]\+$' file
1.02
1.22
$ grep -A2 ^T/V file
T/V   N  NB  P  Q   Time
==========================
2     3   4  1  2   1.02
--
T/V   N  NB  P  Q   Time
==========================
4     42 4  1  2    1.22

結果は最後の grep で区切られ、以下--を使用して削除できます。

$ grep -A2 ^T/V file | grep -v '^--'

次の行を削除した後====

$ grep -A2 ^T/V file | grep -v '^--\|=\+'

答え3

を使用して2つの答えを得ました。awk and grep次のことを試すこともできますsed

sed -E '/===*/{N;s/.*([0-9]+\.[0-9]*)/\1/g};t;d' file_name

ここでは/===*/一致===..し、次の行に移動して、それらの間に小数点を持つ浮動小数点を見つけ、他のすべての行をスキップして削除します。

次の出力が印刷されます。

1.02
1.22

関連情報