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スクリプトを次に示します。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
おわかりのように、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
簡単な 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