假设有一个数据文件data.txt
,其内容如下:
176.05 174.66 169.81 143.48 188.23 186.74 135.95 181.69 162.19 96.84 205.55
输出将类似于:
min: 96.84
max: 205.55
任何简单的脚本都可以做到这一点?
如果你有 GNU awk:
awk '{a[NR]=$1}END{asort(a);print "min: ",a[1],"\nmax: "a[NR]}' RS=' ' file
min: 96.84
max: 205.55
如果您不这样做:
awk '{x=$1>x?$1:x;m=$1<m?$1:m}END{print "min: ",m,"\nmax: ",x}' RS=' ' m=inf x=-m file
min: 96.84
max: 205.55
一个简单的 awk 解决方案
awk 'NR==1{max=min=$1;}{for(i=1;i<=NF;i++){max=max<$i?$i:max;min=min>$i?$i:min;}}END{print "max:",max,"\nmin:",min;}' data.txt
这是一个执行此操作的 AWK 脚本。我删除了空格以在一行中放置更多空间,如果需要,可以将其隔开。
awk '{min=$1;max=$1;for(i=2;i<=NF;i++){if($i>max)max=$i;if($i<min)min=$i}print "min:",min,", max:",max}' data.txt
正如您现在所知道的,awk
它是完成这项工作的好工具。这是一个更改记录分隔符以将每个数字视为输入中的单独记录的变体:
awk '{max=($1>max)?$1:max;
min=($1<min)?$1:min;
}
END{printf "min: %s\nmax: %s\n",min,max}' \
RS=" " min=inf max=-inf file.txt