用于查找数据文件中最大和最小编号的脚本

时间:2013-03-20 19:48:35

标签: bash sed awk

假设有一个数据文件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

任何简单的脚本都可以这样做吗?

4 个答案:

答案 0 :(得分:2)

如果你有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

答案 1 :(得分:0)

直接的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

答案 2 :(得分:0)

这是一个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 

答案 3 :(得分:0)

正如您现在所知,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