将两个值从awk传递给bash

Ren*_*aud 2 variables bash awk

我有在我寻找的最高值列表,并使用最低值awkbash.我能够找到这些,但是我无法将值分配给某个变量,所以我可以在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 
Run Code Online (Sandbox Code Playgroud)

我的awk命令:

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

输出: 6035.

我知道这是可以从一个值传递bashawk通过右键在我的开始在bash声明,并再次awk用脚本-v.

Variable1=string;
awk -v Variable1=$Variable '{}'
Run Code Online (Sandbox Code Playgroud)

有没有办法做同样的事情,但从awk到bash所以我可以保持minmax

anu*_*ava 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)
Run Code Online (Sandbox Code Playgroud)

然后:

echo $max
echo $min
Run Code Online (Sandbox Code Playgroud)

要么:

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

然后:

echo ${arr[0]} # max
echo ${arr[1]} # min
Run Code Online (Sandbox Code Playgroud)

要么:

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

然后:

max=$1
min=$2
Run Code Online (Sandbox Code Playgroud)