たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

シェル芸160ノック10

9月末に発売されたシェル芸本の続きです。データの集計・変形は普段からよくやるからか手段が思いつきやすいですね

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題47

$ cat qdata/47/mom.csv | awk -F, '{if(s){$3=($2/s-1)*100;$3=($3<0?$3:"+"$3)"%"}else{$3="*"};s=$2;print}' OFS=,
2017/01,108192,*
2017/02,134747,+24.5443%
2017/03,120420,-10.6325%
2017/04,147368,+22.3783%
2017/05,262456,+78.0957%
2017/06,280741,+6.96688%
2017/07,315083,+12.2326%
2017/08,522489,+65.8258%
2017/09,489003,-6.40894%
2017/10,729017,+49.0823%
2017/11,987173,+35.4115%
2017/12,1025320,+3.86427%

問題48

$ ps aux | sed 1d | awk '{a[$1]+=$3;t[$1]++}END{for(k in a)print k, a[k], t[k]}' | sort -k2nr
xztaity+ 0.4 13
root 0 3

問題49

$ cat qdata/49/top.log | awk '/^\s+PID/,/^top/' | grep -vPe "^\s+PID|^top" | sel --remove-empty 9 12: | sort -k1nr | head
93.8 /root/test/load_nakamura 2 600000 100000
93.8 /root/test/load_ueda 3 600000 100000
88.2 /root/test/load_nakamura 2 600000 100000
88.2 /root/test/load_ueda 3 600000 100000
61.1 /root/test/load_ueda 3 600000 100000
53.3 /usr/bin/python3 /usr/sbin/iotop -b -n 1 -t -k
50.0 /root/test/load_nakamura 2 600000 100000
50.0 /root/test/load_ueda 3 600000 100000
47.4 /usr/bin/python3 /usr/sbin/iotop -b -n 1 -t -k
47.1 /root/test/load_nakamura 2 600000 100000

これはたまにやる

問題50

$ cat qdata/50/sales | awk '{a[$3$4]+=$5}END{for(k in a)print k, a[k]}' | sort | join - <(sed 's/ //' ./qdata/50/stones_master) | awk '{print $3,$2*$4}'
シェル石 1500
非行石(青) 10000
非行石(偽物・赤) 70
おじいちゃんから出た石 31
デーモンコア 200000

おじいちゃんから出た石

問題51

$ (cat qdata/51/scores.txt | awk '{printf "%03d %d\n", $1,$2}'; awk '{print $1,0}' qdata/51/students.txt) | sort -k1,2n | awk '{a[$1]=$2}END{for(k in a)print k, a[k]}' | sort | join - qdata/51/students.txt | sel 1 3 2
001 井田 0
002 上田 40
003 江田 0
004 織田 0
005 加田 80
006 木田 95
007 久田 0
008 山田 76