2013-06-20 84 views
2

我有一個值列表,我在bash裏面使用awk尋找最高和最低值。我能夠找到這些,但我無法將值分配給某些變量,因此我可以稍後在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 

輸出: 6035

我知道這是可以通過正確的在我的awk腳本-v年初在bash聲明,並再次從bash的值傳遞給awk

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

有沒有辦法做同樣的事情,但是從AWK打壞,所以我可以保持minmax

回答

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 

OR:

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 

OR:

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