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