Запись конкретной ячейки таблицы на основе определенного условия с помощью grep

#shell #scripting #grep

Вопрос:

У меня есть несколько таблиц, которые выглядят следующим образом:

 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  

Меня интересует запись первого числового значения в столбце пробел (второй последний столбец таблицы). Столбец пробел может содержать либо Inf значения, либо x.xx% значения. Если все значения в столбце пробел Inf , то я бы просто записал Inf , в противном случае я хотел бы записать первое числовое значение. Например, в приведенной выше таблице значение, которое я хотел бы записать, равно 0.17 . Я пробовал много разных способов, но не смог добиться никакого успеха. Было бы действительно здорово, если бы кто-нибудь мог дать некоторые рекомендации относительно того, как достичь вышеупомянутой цели. Спасибо!

Ответ №1:

Вы можете использовать это решение awk:

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