linux shell实现求一个多维数组中的最大和最小值
同事发了一道shell题,是求一个多维数组中的最大和最小值
如文件99file:
33 55 23 56 99
234 234 545 6546 34
11 43 534 33 75
43 34 76 756 33
343 890 77 667 55
我的实现之一:
#!/bin/bash echo"thefileis:" cat99shu max=0 min=999999 line=1 dnum=$(cat99shu|wc-l) while(($line<=$dnum)) do foriin$(cat99shu|head-"$line") do ((max<$i))&&max=$i ((min>$i))&&min=$i done let++line done echo"themaxnumberis:$max" echo"theminnumberis:$min"
结果:
themaxnumberis:6546
theminnumberis:11
实现之二:
#!/bin/bash #echotheMAXandtheMIN echo"thenumbersis:" cat99shu mnum=0 min=99999 whilereadline do declare-aarr=($line) lnum=$(echo$line|wc-w) i=0 while(($i<$lnum)) do (($mnum<${arr[i]}))&&mnum=${arr[i]} (($min>${arr[i]}))&&min=${arr[i]} let++i done done<99shu echo"themaxnumberis$mnum" echo"theminnumberis$min"
实现3,强大的awk
#!/bin/bash echo"theMAXnumberis:$(cat99shu|awk'{for(i=1;i<=NF;i++)if(max<$i)max=$i;printmax}'|tail-1)" echo"ehtMINnumberis:$(cat99shu|awk'{min=999999;for(i=1;i<=NF;i++)if(min>$i)min=$i;printmin}'|sort|head-1)"
实现4:
#!/bin/bash min=$(cat99shu|tr"\t""\n"|tr"""\n"|sort-n|uniq|grep-v"^$"|head-1) max=$(cat99shu|tr"\t""\n"|tr"""\n"|sort-n|uniq|grep-v"^$"|tail-1) echo"TheMAXnumberis$max" echo"TheMINnumberis$min"