2

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

4 に答える 4

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
于 2013-03-20T19:54:03.150 に答える
0

これを行うAWKスクリプトを次に示します。1行に収まるようにスペースを削除しました。必要に応じて、スペースを空けることができます。

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 
于 2013-03-20T19:57:27.300 に答える
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
于 2013-03-20T20:05:04.493 に答える
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
于 2013-03-20T19:56:40.990 に答える