Для этого вам нужна маршрутизация политики, т.е. несколько таблиц маршрутизации и набор правил, определяющих, какую таблицу использовать для определенного пакета.
Это объясняется в ответе на похожий вопрос:
Вы уже приняли ответ, но есть более простой способ:
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
. после этого.
Я бы предложил сделать это на 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
для указания пользовательской функции.
Можно попробовать с 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