awkまたはgrep? –printキーワードと次の列

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

[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列だけを出力することは可能ですか?または、上記の例では

1.02 1.22 

のみを印刷することもできますか? blaa部分なしで3つの結果列のみを印刷することをお勧めします:D

コメント

  • 同じ列を意味しますが、次は1つです line

回答

Timeは常に6番目のフィールドにあります:

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

または、getlineを2回使用することもできます-quick “n” dirty :

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

getlineの戻り値をチェックしないため、「ダーティ」)

コメント

  • または、常に'の場合は、$NFを使用します最後の列。
  • @Kusalanandaはい良い点

回答

$ 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 "^--\|=\+" 

回答

sedを試すこともできます:

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

ここ/===*/は、===..と一致し、次の行に移動して、間に10進数が含まれる浮動小数点数を見つけ、他のすべての行をスキップして削除します。

次のような出力が出力されます:

1.02 1.22 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です