shell, 最大値, 並び替え
やること
例えば以下のようなファイルを考えて、これを1列目の数字が昇順になるように並べます。
sample.txt 13 0.8 48 7.9 33 14.1 63 19.3 25 20.6 14 22.6 29 24.8 68 28 47 32.9 94 35.1
やることはまず1列目の最大値を求めて、次に1列目を並び替えます。
最大値の求め方
次のようなスクリプトで求められます。
> file="sample.txt" > awk '{if(m<$1) m=$1} END{print m}' $file 94
並び替え
得た最大値を利用します。
shellで変数i
をforループで回しています。awkの中でも参照するために、awkの変数num
に代入して用いています。
# sort.sh N=`awk '{if(m<$1) m=$1} END{print m}' $file` function spike_sort () { for i in `seq 0 $N` do awk -v num=$i '$1==num {print $1 " " $2}' $file done } spike_sort
走らせるときはsh sort.sh
とやって以下のような結果が帰る。
> sh sort.sh 13 0.8 14 22.6 25 20.6 29 24.8 33 14.1 47 32.9 48 7.9 63 19.3 68 28.0 94 35.1