Найдите минимальное и максимальное значение столбца 3 и распечатайте целую строку

Для этого вам нужна маршрутизация политики, т.е. несколько таблиц маршрутизации и набор правил, определяющих, какую таблицу использовать для определенного пакета.

Это объясняется в ответе на похожий вопрос:

Маршрутизация SSH к хосту через интерфейс

0
05.01.2019, 14:31
3 ответа

Вы уже приняли ответ, но есть более простой способ:

egrep -v "0.00|^\." file.txt | awk 'NR==1 {print "min:",$0} END{print"max:",$0}'

Выход:

min: -2.4 -1.6 -14.50
max: -5.4 -2.6 -4.50

-Поскольку вам не нужны нули, хотя на самом деле они являются наибольшим числом, команда egrep -vвыводит все строки, кроме тех, которые содержат 0,00 и начинаются с "."

-После вышесказанного строки уже идут по порядку от меньшего к большему. Затем awkпечатает первую строку с добавлением «min :», а последнюю строку с добавлением «max :».

Если значения в этом столбце расположены не по порядку, вы можете передать sort -k3(, предполагая, что это третий столбец, который вы хотите отсортировать )после команды egrep, а затем передать его в команду awk. после этого.

0
28.01.2020, 04:05

Я бы предложил сделать это на Python. Если ваши данные разделены пробелом -, это будет что-то простое, например:

minVal = None
maxVal = None
with open('file') as f:
  for line in f:
    # default: split on whitespace.
    third = int(line.split()[2])
    if not minVal:
      # initialize the values
      minVal = third
      maxVal = third
    else:
      minVal = min(third, minVal)
      maxVal = max(third, maxVal)

print("min", minVal)
print("max", maxVal)

РЕДАКТИРОВАТЬ:учитывая, что вам нужна вся строка, вы должны вместо этого сохранить minRowи maxRow. В прошлом, когда мне приходилось делать что-то подобное, я использовал пользовательскую функцию min/max. Оба принимают аргумент keyдля указания пользовательской функции.

0
28.01.2020, 04:05

Можно попробовать с awk:

awk -v 'f=1' '
  NF==3 {
    min = min < $3 ? min : $3
    if ( min != oldmin ) {
      a = $0
      oldmin = min
      }
    if ( $3 < 0 ) {
      if ( f ) {
        max = min
        f = 0
      }
      max = max > $3 ? max : $3
    }
    if ( max != oldmax ) {
      oldmax = max
      b = $0
      }
    }
  END {
    print "min : " a RS "max : " b
    }
' infile
0
28.01.2020, 04:05

Теги

Похожие вопросы