■USP友の会会長が出題した後半戦を解いてみた。
hbstudy
http://www.usptomo.com/PAGE=20121028HBSTUDY
■問題6:日付の計算(中級)
1978念2月16日は2012念1027日の何日前でしょう?
$ echo `date --date "1978/02/16" +'%s'; date --date "2012/10/27" '+%s'` | awk '{print ($2-$1)/60/60/24}'
12672
■おまけ。
曜日は+2日ズレ。
$ echo "12672" | awk '{print $1%7}'
2
$ echo `date --date "1978/02/16"; date --date "2012/10/27"`
1978年 2月 16日 木曜日 00:00:00 JST 2012年 10月 27日 土曜日 00:00:00 JST
■問題7:リストにないものを探す(中級)
1から10のうち欠けている数の表示。
$ seq 1 10 | awk '{print rand(),$1}' | sort | head -9 | awk '{print $2}' > nums
$ for n in `seq 1 10`;do grep "$n\$" nums > /dev/null || echo $n;done
9
■問題8:CPU使用率(上級)
topからどのユーザが何%CPUを使用しているかの集計
$ top -b -n 1 | tail -n +8 | grep -v "^\$" | \
awk '{print $2,$9}' | sort -k 1 | \
awk '{if($1==USER){CPU+=$2}else{print USER,CPU;USER=$1;CPU=$2}}END{print USER,CPU}' | \
sort -k 2 -nr | grep "^[a-z]" | nl -b t -n rz -w 2 | awk '{print "dummy"$1,$3}'
dummy01 2
dummy02 0
dummy03 0.0
dummy04 0.0
dummy05 0
dummy06 0
dummy07 0
dummy08 0
dummy09 0.0
dummy10 0.0
dummy11 0
dummy12 0
■問題9:横に並んだ数字のソート(上級)
行の数値ソート。
$ seq 1 1000 | awk '{print rand(),$1}' | sort | head -9 | awk '{print $2}' | xargs echo -n;echo; \
seq 1000 -1 1 | awk '{print rand(),$1}' | sort | head -9 | awk '{print $2}' | xargs echo -n; \
echo;seq 1 2 100 | awk '{print rand(),$1}' | sort | head -9 | awk '{print $2}' | xargs echo -n;echo;
515 454 27 235 347 597 669 852 942
486 547 974 766 654 404 332 149 59
53 89 95 9 23 49 75 97 85
$ echo '515 454 27 235 347 597 669 852 942
486 547 974 766 654 404 332 149 59
53 89 95 9 23 49 75 97 85' > file
$ while read LINE; do echo $LINE | sed s/" "/"\n"/g | sort -n | xargs echo -n;echo; done < file
27 235 347 454 515 597 669 852 942
59 149 332 404 486 547 654 766 974
9 23 49 53 75 85 89 95 97
■問題10:対戦表を作る(上級)
CSV出力を若干強引に。。。
$ echo "阪神
中日
広島" | tac | echo -n `xargs` | awk '{print $0" "$3" "$2" "$1}' | \
sed s/" "/"\n"/g | sed s/"^..\$"/"&,,,"/g | sed s/". "/"&,"/g | sed s/"^.. "/",&"/g | sed s/" "//g
,広島,中日,阪神
阪神,,,
中日,,,
広島,,,