2013-06-20 3 views
2

안에 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 

출력 : 6035.

나는 바로 -vawk 스크립트의 시작 부분에 다시 bash는 그것을 선언에 의해 awkbash에서 값을 전달할 수 있습니다 알고 있습니다.

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

같은 일을 할 수있는 방법이 있나요하지만, AWK에서 내가 minmax을 유지할 수 있도록 비난하는? 다음

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 :

답변

8

당신이 할 수있는 다음

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