2013-06-20 7 views
2

У меня есть список значений, в которых я ищу наивысшее и самое низкое значение, используя awk внутри bash. Я могу найти их, но я не могу назначить значения некоторой переменной, чтобы впоследствии использовать их в bash.Передача двух значений от awk до bash

Мой вход:

number location length value 

1  2   40  0.96 
---  5   45  0.97 
4  5   47  0.96 
---  5   35  0.95 
2  5   60  0.95 
---  3   55  0.96 

Моя awk Команда:

awk 'NR==1{max=$3; min=$3}{if ($3>max) max=$3; if ($3<min) min=$3;} END {print max,min}' List.txt 

Выход: 60 и 35.

Я знаю, что можно передать значение из bash в awk, объявив его в Баш и снова в самом начале моего awk сценария с -v.

Variable1=string; 
awk -v Variable1=$Variable '{}' 

Есть ли способ сделать то же самое, но с AWK колотить, так что я могу держать min и max?

ответ

8

Вы можете сделать:

read -r max min < <(awk 'NR==1{max=$3; min=$3}{if ($3>max) max=$3; if ($3<min) min=$3;} END {print max,min}' List.txt) 

затем:

echo $max 
echo $min 

ИЛИ:

arr=($(awk 'NR==1{max=$3; min=$3}{if ($3>max) max=$3; if ($3<min) min=$3;} END {print max,min}' List.txt)) 

затем:

echo ${arr[0]} # max 
echo ${arr[1]} # min 

ИЛИ:

set -- $(awk 'NR==1{max=$3; min=$3}{if ($3>max) max=$3; if ($3<min) min=$3;} END {print max,min}' List.txt) 

затем:

max=$1 
min=$2 
+0

Спасибо! В первом случае, зависит ли это от заказа или от имени? – Renaud

+0

Идет по имени и имена используются в порядке выхода awk. – anubhava