我有一个值列表,我在awk
内使用bash
寻找最高和最低值。我能够找到这些,但是我无法将值分配给某个变量,所以我可以稍后在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
,方法是将其声明为bash,然后再次发送到我的awk
脚本开头-v
。
Variable1=string;
awk -v Variable1=$Variable '{}'
有没有办法做同样的事情,但是从awk到bash所以我可以保留min
和max
?
答案 0 :(得分: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