我做了一些基准测试,输出是一个包含多个结果的单个文件,格式如下
[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
我只想获取我所做的不同运行的运行时间。那么是否可以 grep “Time” 并打印下一列?或者甚至只打印出来
1.02
1.22
对于我上面的例子?我更喜欢只打印三个结果列,而不打印 blaa 部分:D
答案1
假设Time
总是在第六个字段:
$ awk '$6 == "Time" {t = NR} t && NR == t+2 {print $6}' file
1.02
1.22
或者你可以使用getline
两次 - fast'n'dirty:
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
您使用 得到了两个答案awk and grep
,您也可以尝试sed
:
sed -E '/===*/{N;s/.*([0-9]+\.[0-9]*)/\1/g};t;d' file_name
这里/===*/
, 将匹配===..
,然后它将转到下一行并查找它们之间有小数的浮点数,并跳过并删除所有其他行。
它将打印如下输出:
1.02
1.22