使用grep根据特定条件记录table的特定单元格

Recording particular cell of a table on the basis of a certain condition using grep

我有一些 table 如下所示:

 time | node  | left  |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr|  dualbound   | primalbound  |  gap   | compl. 
  0.0s|     1 |     0 |   100 |     - |  1046k |   0 | 100 | 102 | 100 |   0 |  0 |   0 |   0 |      --      | 9.999990e+05*|    Inf | unknown
* 0.3s|     1 |     0 |   100 |     - |    LP  |   0 | 200 | 102 | 100 |   0 |  0 |   0 |   0 |      --      | 5.587300e+04 |    Inf | unknown
 12.0s|     1 |     0 |   239 |     - |  1781k |   0 | 239 | 102 | 100 |   0 |  0 |   0 |   0 | 5.577800e+04 | 5.587300e+04 |   0.17%| unknown
 12.1s|     1 |     0 |   287 |     - |  2595k |   0 | 239 | 102 | 935 | 835 |  1 |   0 |   0 | 5.577800e+04 | 5.587300e+04 |   0.17%| unknown
 66.8s|     1 |     0 |   422 |     - |  3061k |   0 | 336 | 102 | 935 | 835 |  1 |   0 |   0 | 5.577800e+04 | 5.587300e+04 |   0.17%| unknown
 89.4s|     1 |     0 |   481 |     - |  3218k |   0 | 361 | 102 | 935 | 835 |  1 |   0 |   0 | 5.580100e+04 | 5.587300e+04 |   0.13%| unknown
 89.5s|     1 |     0 |   579 |     - |  3513k |   0 | 361 | 102 |1335 |1235 |  2 |   0 |   0 | 5.580100e+04 | 5.587300e+04 |   0.13%| unknown
  100s|     1 |     0 |   715 |     - |  3837k |   0 | 403 | 102 |1335 |1235 |  2 |   0 |   0 | 5.583250e+04 | 5.587300e+04 |   0.07%| unknown

我有兴趣记录间隙列中的第一个数值(table 的倒数第二列)。 gap 列可以包含 Infx.xx% 值。如果gap列的所有值都是Inf,那么我就直接记录Inf,否则,我想记录第一个数值。例如在上面的table中,我要记录的值是0.17。我尝试了许多不同的方法,但没有取得任何成功。如果有人可以提供一些关于如何实现上述 objective 的指导,那就太好了。谢谢!

您可以使用这个 awk 解决方案:

awk -F '[[:blank:]]*\|[[:blank:]]*' '
NR > 1 && (!v || v == "Inf") {
   v = ($(NF-1) == "Inf" ? $(NF-1) : $(NF-1)+0)
}
END {
   print v
}' file

0.17